前回記事で、Django管理画面をカスタマイズする簡単な例を紹介したが、この続きでさらに管理画面を拡張していく。

【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):