Python Django admin在变更列表中显示错误的列表
我试图在Django管理列表视图中为不同的用户显示不同的字段(我猜它被称为changelist)。Django为非超级用户显示正确的字段集,但为超级用户在字段集之间切换 我有一个超级用户和一个非超级用户,在Python Django admin在变更列表中显示错误的列表,python,django,django-admin,Python,Django,Django Admin,我试图在Django管理列表视图中为不同的用户显示不同的字段(我猜它被称为changelist)。Django为非超级用户显示正确的字段集,但为超级用户在字段集之间切换 我有一个超级用户和一个非超级用户,在some\u app中定义的模型上具有自定义权限perm1。通过组对非超级用户设置权限 下面是根据用户的不同,我用来切换显示的代码 def changelist_view(self, request, **kwargs): user = request.user if user
some\u app
中定义的模型上具有自定义权限perm1
。通过组对非超级用户设置权限
下面是根据用户的不同,我用来切换显示的代码
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\u display
。没有区别
Django根据访问该视图的用户正确输出日志(make_log()
)。但Django几乎有一半的时间向超级用户显示为非超级用户准备的字段集。并且它始终为具有权限的用户显示正确的字段集perm1
我还尝试使用如果不是user.is\u superuser和user.has\u perm('some\u app.perm1')
作为条件,也没有区别。据Django说,我猜超级用户可以做他们想做的任何事情,但没有权限
我做错了什么
更新(谢谢):假设超级用户没有权限在某种意义上是不正确的,因为Django查看的是类列表的显示,而不是实例列表的显示。 要显示动态列表,请覆盖
ModelAdmin.get\u list\u display
为什么不使用
get\u list\u display()
方法?另外,我确信您需要从您的条件中排除is\u superuser
,因为超级用户总是拥有所有权限(has\u perm()总是为超级用户返回true)。我没有考虑使用该方法,但会尝试,谢谢。@dirkgroten关于使用is\u superuser
,我将其添加到条件中,因为我需要限制部分非超级用户的某些行为。这就是为什么我认为需要而不是user.is\u superuser
。然后我检查了这个非超级用户是否有权限(我更愿意称之为策略)区分不同的非超级用户组。我能在不检查是否超级用户
的情况下实现这一点吗?当我说“您需要排除是否超级用户
”时,我的意思是您需要确保该用户不是超级用户(即,是的,如果不是用户,您需要有。如果您想从特殊用户组中排除超级用户,您需要有。)谢谢,我会尝试。但是,如果条件不是user.is\u superuser和user.has\u perm('some\u app.perm1')
,为什么显示的字段集会在条件为时切换为superuser?