管理サイトのカスタマイズ
CoddyのDjangoジャーニー「モデルと管理サイト」セクションの一部。レッスン 21/23。
管理サイトの書籍一覧には、各書籍の__str__を表示する列が1つあるだけで、何かを探す方法もありません。デコレーターで登録するModelAdminクラスを使うと、これを変更できます。ForeignKey bookを持つLoanの場合は次のとおりです。
@admin.register(Loan)
class LoanAdmin(admin.ModelAdmin):
list_display = ["book", "friend", "lent_on", "returned"]
search_fields = ["friend", "book__title"]
list_filter = ["returned", "lent_on"]list_displayで列を選びます。ForeignKeyの列には関連する行の__str__が表示され、多対多フィールドは列にできません。search_fieldsは検索ボックスを追加します。ForeignKeyをたどって検索するには、2つのアンダースコアの後にもう一方のモデルのフィールド名を指定します。book__titleのようにします。bookだけではリンクであり、テキストではないため、検索時にエラーになります。list_filterはフィルターのサイドバーを追加します。
デコレーターはadmin.site.register(Loan, LoanAdmin)と同じ処理をします。各モデルは一度だけ登録してください。2回目の登録をすると、AlreadyRegisteredエラーが発生してサイトが停止します。
チャレンジ
簡単books/admin.py で、Book を通常の登録ではなく、BookAdmin を使って登録してください。書籍一覧には次の項目を設定します。
title、author、year、genre、is_readの列- 書籍のタイトルまたは著者名で検索できる検索ボックス
genreとis_readで絞り込めるサイドバー
「Run」を押し、再度ログインして、herbert を検索してください。
自分で試してみよう
from django.contrib import admin
from .models import Author, Book, Tag
admin.site.register(Book)
admin.site.register(Author)
admin.site.register(Tag)
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
モデルと管理サイトのすべてのレッスン
自分で練習してみよう: Djangoプレイグラウンド