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) と同じ処理をします。モデルはそれぞれ1回だけ登録してください。2回目の登録をすると、サイトは AlreadyRegistered エラーで停止します。

challenge icon

チャレンジ

簡単

books/admin.pyで、Bookを通常の登録ではなく、BookAdminに登録してください。書籍一覧には次の項目を表示します:

  • title、author、year、genre、is_readの列
  • 書籍のタイトルまたは著者名で検索できる検索ボックス
  • genreとis_readで絞り込めるサイドバー

もう一度createsuperuserを実行してログインし、書籍をherbertで検索します:Children of DuneとDune。

自分で試してみよう

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プレイグラウンド