具有动态list_display的基本Admin类

时间:2017-07-21 00:10:14

标签: python django django-models django-views django-admin

我为所有具有名为11111111111111111111111111111111101110101111100的字段的类编写了一个管理类的基类。它使用户能够查看表的记录以及is_active字段,以便他们可以看到哪个记录处于活动状态,并且可以对其进行编辑。

对于我在模型中的大多数类,有一个名为is_active的字段,因此我可以在name中轻松编写2行代码,并具有自定义的管理代表,但是问题是没有名为admin.py的字段的类,所以我必须在name中使用不同的字段。由于这些类的数量很多,我正在寻找一种解决方案来动态获取必须在list_display中的字段的名称。任何解决这个问题的想法都会非常感激。

models.py:

list_display

admin.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

1 个答案:

答案 0 :(得分:0)

您正在寻找get_list_display https://docs.djangoproject.com/en/1.11/ref/contrib/admin/#django.contrib.admin.ModelAdmin.get_list_display

将其与ModelAdmin.model(即self.model方法中的get_list_display)结合使用,可根据模型创建动态列表显示。

请注意,我个人建议不要将此自动化添加到BaseAdmin中,并分别定义子类ModelAdmin(在本例中为list_display)之间的不同之处。它更明确,更清晰。这是纯粹的意见。