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

Tro*_*roy 13 django django-admin

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

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

Tro*_*roy 22

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

机票#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
Run Code Online (Sandbox Code Playgroud)