Python Django admin在变更列表中显示错误的列表

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

我试图在Django管理列表视图中为不同的用户显示不同的字段(我猜它被称为changelist)。Django为非超级用户显示正确的字段集,但为超级用户在字段集之间切换

我有一个超级用户和一个非超级用户,在
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?