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