如何在django管理页面中为我的所有模型自动创建list_filters?

时间:2015-04-26 16:16:44

标签: python django django-admin django-admin-filters

我有一个Django站点,使用admin来管理模型。目前,我正在使用

from django.db.models.base import ModelBase

for name, var in databuild_models.__dict__.items():
    if type(var) is ModelBase:
        admin.site.register(var)

使用admin模块注册模块中的所有模型。但是,我想为每个模型的每个属性自动添加list_filters。我已阅读https://docs.djangoproject.com/en/1.8/ref/contrib/admin/,他们使用的格式为:

class MymodelAdmin(admin.ModelAdmin):
    list_filter = ['model_name_attribute']

然后

admin.site.register(models.MyModel, MyModelAdmin)

有没有办法在模型中循环浏览每个属性,并将其添加到过滤器列表?

例如:

filter_list_fields = []
for attr in MyModel:
    filter_list_fields.append(str(attr))
list_filter = filter_list_fields

然后将它们注册为普通类?

1 个答案:

答案 0 :(得分:1)

首先,您可以使用applications api获取应用中的模型列表,而不是检查模块的__dict__

在Django 1.8+中,您可以使用Model._meta.get_fields方法获取模型的字段名称列表。我已经排除了自动生成的id字段,您可能会发现需要进一步改进。

在python中,您可以使用type动态创建一个类。您需要新类的名称(此处不重要),它继承的基类(在本例中为Admin.ModelAdmin)和属性字典(在这种情况下,只有一个属性,{{1 }})。

最后,使用我们创建的自定义模型管理员注册模型。

把它放在一起,你的admin.py应该是这样的:

list_filter