概要
詳細画面で表示される項目をモデルの状態に合わせて変えたい。
そこで、get_fields()を改造することにした。
前提
- Django 3.2
経緯
こんなデフォだとこんな感じのfields設定
class SomeAdmin(admin.ModelAdmin):
fields = (
'some_field_A',
('some_field_B1','some_field_B2'),
('some_field_C1','some_field_C2'),
'some_field_D',
'some_field_E'
)
B1とB2, C1とC2を並べて表示している。
しかし、B2がない時、C2がない時にはB1, C1だけを表示したい。
方法
get_fields()を上書きする。
class SomeAdmin(admin.ModelAdmin):
def get_fields(self, request, obj=None):
B_field = ('some_field_B1','some_field_B2') if obj.some_field_B2 else 'some_field_B1'
C_field = ('some_field_C1','some_field_C2') if obj.some_field_C2 else 'some_field_C1'
custom_fields = (
'some_field_A',
B_field,
C_field,
'some_field_D',
'some_field_E'
)
return custom_fields
こんな感じ。