我该如何动态指定Django ModelAdmin类的"list_display"属性?

13

在尝试动态更改django管理界面中的模型列表页显示的列时,我尝试覆盖ModelAdmin类的__init__()方法以根据当前用户的权限动态添加或删除特定字段到list_display属性中。然而,我发现每次重启只实例化一次ModelAdmin类,所以这种方法行不通...

是否有其他方法可以动态更改list_display字段呢?

1个回答

28
在提问时,我意外地找到了答案,所以想分享一下...票号#14206表明这个功能已经在一段时间前(我相信是1.4版本)被加入到Django中。现在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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接