如何动态指定django ModelAdmin类的“list_display”属性?

时间:2013-04-20 00:05:10

标签: django django-admin

在尝试动态更改django admin的模型列表页面中显示的列时,我尝试重写我的ModelAdmin类的__init__()方法,以动态添加或删除list_display属性中的特定字段,具体取决于当前用户的权限。但是,我发现ModelAdmin类只在每次重启时实例化一次,因此不起作用......

还有另一种动态更改list_display字段的方法吗?

1 个答案:

答案 0 :(得分:19)

在问这个问题时,我偶然发现了答案,所以我想我会分享......

Ticket #14206表示此功能已于前一段时间添加到django(版本1.4,我相信)。 ModelAdmin类现在支持get_list_display()方法:

def get_list_display(self, request):
    if request.user.has_perm('my_app.my_permission'):
        list_display = ('field_1', 'field_2', 'dynamic_field',)
    else:
        list_display = ('field_1', 'field_2',)
    return list_display