LoginSignup
0
0

More than 1 year has passed since last update.

Django Adminの詳細画面でfieldsの項目を動的に変更する

Posted at

概要

詳細画面で表示される項目をモデルの状態に合わせて変えたい。
そこで、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            

こんな感じ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0