前回記事で、Django管理画面をカスタマイズする簡単な例を紹介したが、この続きでさらに管理画面を拡張していく。
現時点で質問と選択肢、QuestionモデルとChoiceモデルをこのチュートリアルで用意してきたが、現時点で管理画面からはQuestionしか編集できないようになっている。
まずはChoiceをインポートする。
from .models import Choice, Question
管理画面に追加するだけなら、registerメソッドにChoiceオブジェクトを渡すだけでOKだ。
admin.site.register(Choice)
しかし本来、質問に対して選択肢が設定される関係にあるので、それぞれが独立した画面で構成されると管理がしづらくなる。
そこで、選択肢の管理は質問の編集画面でおこなうことにする。
from django.contrib import admin
from .models import Choice, Question
class ChoiceInline(admin.TabularInline):
model = Choice
extra = 3
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['question_text']}),
('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
]
inlines = [ChoiceInline]
admin.site.register(Question, QuestionAdmin)
まずは結果から見ていこう。
質問追加のページを見ると、以下のとおり3つの選択肢を登録するフィールドが追加されていることが分かる。
新たにChoiceInlineクラスを作成し、QuestionAdminクラスのinlinesに渡している。
ChoiceInlineクラスのextraで指定した3という値が表示する選択肢の数で、常に3つの入力フィールドが表示される。
なお、選択肢の表示形式はChoiceInlineクラスにStackedInlineを渡すことで、以下のようなレイアウトに変更することも可能だ。
class ChoiceInline(admin.StackedInline):