Menu
CoddyTech

管理サイトのカスタマイズ

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エラーが発生してサイトが停止します。

challenge icon

チャレンジ

簡単

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)
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

モデルと管理サイトのすべてのレッスン

自分で練習してみよう: Djangoプレイグラウンド