我试图在Django管理列表视图中为不同的用户显示不同的字段(我猜它被称为changelist)。Django为非超级用户显示了正确的字段集,但在超级用户的字段集之间切换。
我有一个超级用户和一个非超级用户,对在perm1中定义的模型具有自定义权限的some_app。该权限通过组设置为非超级用户。
下面是我用于根据用户切换list_display的代码。
def changelist_view(self, request, **kwargs):
user = request.user
if user.has_perm('some_app.perm1'):
self.list_display = (
'field1',
'field2',
)
make_log('non-super user')
else:
self.list_display = (
'field1',
'field2',
'field3',
'field4',
)
make_log('superuser')
return super(CustomAdmin, self).changelist_view(request, **kwargs)我尝试过在类定义中使用和不使用list_display。没什么区别。
Django根据谁访问该视图正确地输出日志(make_log())。但是几乎有一半的时间Django向超级用户展示了一组针对非超级用户的字段。并且它总是为具有权限perm1的用户显示正确的字段集。
我也尝试使用if not user.is_superuser and user.has_perm('some_app.perm1')作为条件,也没有区别。我想超级用户可以做他们想做的任何事情,但是根据Django的说法,它没有权限。
我做错了什么?
更新(谢谢@dirkgroten):
假设超级用户没有权限是不正确的,因为some_superuser.has_perm('some_app.perm1')返回True,即使该超级用户的权限没有显式设置(直接或通过组)。
发布于 2019-04-09 10:00:07
这是因为Django看的是类list_display,而不是实例list_display。若要具有动态list_display,请覆盖ModelAdmin.get_list_display
https://stackoverflow.com/questions/55589880
复制相似问题