もた日記

くだらないことを真面目にやる

Djangoメモ(32) : UpdateViewでユーザーアカウント情報を編集

  • UpdateViewでユーザーアカウント情報を編集
  • fieldsの変更
  • まとめ

Python 3.6.4 Django 2.0.2

A Complete Beginner's Guide to Djangoのチュートリアルを参考にユーザーアカウント情報を編集してみる。


UpdateViewでユーザーアカウント情報を編集

前回まででクラスベース汎用ビューのUpdateView, ListViewを使用してみたが、UpdateViewを使用してユーザーアカウント情報の編集機能を作成してみる。
accounts/views.pyを以下のように編集。

from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User
from django.urls import reverse_lazy
from django.utils.decorators import method_decorator
from django.views.generic import UpdateView

@method_decorator(login_required, name='dispatch')
class UserUpdateView(UpdateView):
    model = User
    fields = ('first_name', 'last_name', 'email')
    template_name = 'my_account.html'
    success_url = reverse_lazy('my_account')

    def get_object(self):
        return self.request.user
続きを読む

Djangoメモ(31) : クラスベース汎用ビューのListViewで一覧表示とページネーション

  • ListViewで一覧ページ作成
  • 対話型シェルでページネーションの確認
  • 関数ベースビューでのページネーション
  • クラスベース汎用ビューのListViewでのページネーション
  • ページネーションのテンプレートを再利用
  • まとめ

Python 3.6.4 Django 2.0.2

A Complete Beginner's Guide to Djangoのチュートリアルを参考にクラスベース汎用ビューのListViewを使用してみる。


ListViewで一覧ページ作成

前回はUpdateViewを使用して編集機能を作成したが、今回はListViewを使用して一覧ページを作成する。
これまでは関数ベースビューを使用して以下のように書いていた。

myproject/urls.py

path('', views.home, name='home'),

boards/views.py

from django.shortcuts import render
from .models import Board

def home(request):
    boards = Board.objects.all()
    return render(request, 'home.html', {'boards': boards})
続きを読む

Djangoメモ(30) : クラスベース汎用ビューのUpdateViewで編集機能作成

  • ビューの種類
    • 関数ベースビュー
    • クラスベースビュー
    • クラスベース汎用ビュー
  • UpdateViewを使って編集機能を作成
  • UpdateViewのテスト
  • まとめ

Python 3.6.4 Django 2.0.2

A Complete Beginner's Guide to Djangoのチュートリアルを参考にクラスベースビューを使用してみる。


ビューの種類

これまでのチュートリアルでは関数ベースビューを使用してきたが、ビューにはその他にクラスベースのビューがある。
以降、それぞれについて説明する。

  • 関数ベースビュー(Function-based views)
  • クラスベースビュー(Class-based views)
  • クラスベース汎用ビュー(Class-based generic views)
続きを読む

Djangoメモ(29) : migrateでモデルに閲覧数カウント用のフィールドを追加

  • モデルにフィールド追加
  • migrateコマンド実行
  • ビュー、テンプレートの変更
  • まとめ

Python 3.6.4 Django 2.0.2

A Complete Beginner's Guide to Djangoのチュートリアルを参考にモデルに閲覧数カウント用のフィールドを追加してみる。


モデルにフィールド追加

migrateコマンドを使ってTopicモデルに閲覧数カウント用のviewsフィールドを追加してみる。
作業を進める前に適用していないマイグレーションがないか確認しておく。No migrations to applyとなればよい。

$ python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, boards, contenttypes, sessions
Running migrations:
  No migrations to apply.
続きを読む

Djangoメモ(28) : QuerySet API(count, annotate)で個数のカウント

  • 対話型シェルで確認
  • モデル、テンプレートの実装
  • annotate()
  • まとめ

Python 3.6.4 Django 2.0.2

A Complete Beginner's Guide to Djangoのチュートリアルを参考にQuerySet APIを使ってみる。


対話型シェルで確認

チュートリアルに沿って掲示板アプリを作成しているが、今回はQuerySet APIを使用してPost、Topicの個数、最後のPostに関する情報を表示してみる。

f:id:wonder-wall:20180326220954p:plain

最初に、オブジェクトをわかりやすく表示するためにboards/models.pyの各モデルに__str__を定義しておく。
Truncatorは文字列を切り詰めることができるクラス。

from django.db import models
from django.utils.text import Truncator

class Board(models.Model):
    # ...
    def __str__(self):
        return self.name

class Topic(models.Model):
    # ...
    def __str__(self):
        return self.subject

class Post(models.Model):
    # ...
    def __str__(self):
        truncated_message = Truncator(self.message)
        return truncated_message.chars(30)
続きを読む