2017-07-21 4 views
1

is_activeというフィールドを持つすべてのクラスの管理クラスの基本クラスを作成しました。これにより、ユーザーはis_activeフィールドとともに表のレコードを見ることができるので、どのレコードがアクティブであるかを知ることができ、編集することができます。動的リスト表示の基本管理クラス

ほとんどのクラスではnameというフィールドがありますので、コードの2行をadmin.pyに簡単に書き込むことができ、カスタマイズされた管理表現を持つことができますが、問題はクラスnameというフィールドがあるので、list_displayに別のフィールドを使用する必要があります。これらのクラスの数が多いので、フィールドの名前を動的に取得するか、list_displayにある必要があります。この問題を解決するためのアイデアは非常に高く評価されます。

models.py:

class BaseAdmin(admin.ModelAdmin): 
    list_display=('id','name','is_active') 
    list_editable = ('is_active',) # this MUST only contain fields that also are in "list_display" 
    search_fields=('name',) 


class ClassA(models.Model): 
    name=models.CharField(max_length=20, blank=False, unique=True,) 
    is_active=models.BooleanField(default=True,) 

    def __str__(self): 
      return self.name 

class ClassB(models.Model): 
    my_field=models.CharField(max_length=20, blank=False, unique=True,) 
    is_active=models.BooleanField(default=True,) 

    def __str__(self): 
      return self.my_field 

admin.py

class ClassAAdmin(BaseAdmin): 
    pass 

class ClassBAdmin(BaseAdmin): 
    pass 

答えて

0

あなたはModelAdmin.model(すなわち内部self.modelと連動していることをget_list_displayhttps://docs.djangoproject.com/en/1.11/ref/contrib/admin/#django.contrib.admin.ModelAdmin.get_list_display

使用を探していますget_list_displayメソッド)を使用して、モデルに基づいて動的リスト表示を作成します。私が個人的に別々BaseAdminにこの自動化を焼成し、サブクラスModelAdmin S(この場合、list_display)間で異なるものを定義しないお勧め

注意。それはより明確で明快です。しかしこれは純粋な意見です。

+0

私は 'get_list_display'について知っていましたが、私の問題はどのように把握できないということです。それが10〜20クラスの場合は、別々に定義するのは気にしませんが、100〜200個のクラスについて話していますので、かなり短いものを考え出す価値があります。どのようにすべてのフィールドのリスト(各クラスに1つのフィールド)を与えることができるかわかりませんので、list_displayに適切なものを選択できます – Ibo

関連する問題