[前回] Django+Reactで学ぶプログラミング基礎(15): Djangoチュートリアル(投票アプリその7-1)
はじめに
Django公式チュートリアル、その7-2です。
前回は、管理サイトをカスタマイズしました。
今回は、その続きです。
Djangoアプリ作成(その7-2): 投票(poll)アプリ
今回の内容
- 管理サイトの変更リスト(change list)ページをカスタマイズ
- 変更リスト(change list)ページとは
- 全ての質問をリスト表示し、変更するためのページ
- フィールドによるソート機能
- フィルター機能
- 検索機能
- 変更リスト(change list)ページとは
Tips: VS CodeでPythonのvenv環境をデフォルトでアクティベートしたい
-
VS Codeを起動
-
ターミナルを起動
管理サイトの変更リストページをカスタマイズ
- VS Codeからサーバーを起動
(venv) C:\kanban\pollsite>python manage.py runserver
Question
オブジェクトの各フィールドを表示する
-
list_display
オプションを使用- カラム表示したいフィールドの名前をタプルにして指定
polls/admin.py
class QuestionAdmin(admin.ModelAdmin):
# ...
list_display = ('question_text', 'pub_date', 'was_published_recently')
※ ソース修正後には、保存を忘れず(Ctrl+S)。
フィールド値の並べ替え
-
was_published_recently
ヘッダーをクリック、あれー、並べ替えボタンが現れない- 改善:
display()
デコレータを使用
- 改善:
polls/models.py
from django.contrib import admin
class Question(models.Model):
# ...
@admin.display(
boolean=True,
ordering='pub_date',
description='Published recently?',
)
def was_published_recently(self):
now = timezone.now()
return now - datetime.timedelta(days=1) <= self.pub_date <= now
フィルター(Filter)サイドバーを作成
- 質問変更リストページに
list_filter
を追加- フィルタの種類は、対象フィールドの種類に応じて変化
-
QuestionAdmin
クラスに、次の行を追加- ※ ファイル保存を忘れず(Ctrl+S)
polls/admin.py
list_filter = ['pub_date']
検索機能を追加
- 変更リストの上部に検索ボックスを作成
- ユーザが検索語を入力すると、
question_text
フィールドを検索してくれる - 内部では、
LIKE
クエリを使って検索するため、データベースに負荷がかかる
- ユーザが検索語を入力すると、
polls/admin.py
search_fields = ['question_text']
-
更新リストのページ分割機能
- デフォルトで、ページあたり100個の要素を表示
-
更新リストページの以下機能は協調して動作
- ページ分割
- 検索ボックス
- フィルター
- 日付による階層化
- カラムヘッダーを使った並べ替え
おわりに
管理サイトで、更新リストページをカスタマイズしました。
検索やフィルター機能を一瞬で実装できるなんて、Djangoすごい!
次回も続きます。お楽しみに。