首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django管理员在变更列表中显示错误的list_display

Django管理员在变更列表中显示错误的list_display
EN

Stack Overflow用户
提问于 2019-04-09 09:48:54
回答 1查看 659关注 0票数 0

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

我有一个超级用户和一个非超级用户,对在perm1中定义的模型具有自定义权限的some_app。该权限通过组设置为非超级用户。

下面是我用于根据用户切换list_display的代码。

代码语言:javascript
复制
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,即使该超级用户的权限没有显式设置(直接或通过组)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-09 10:00:07

这是因为Django看的是类list_display,而不是实例list_display。若要具有动态list_display,请覆盖ModelAdmin.get_list_display

display

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55589880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档