【问题标题】:Django why is a permissions code name different from checking if it has a permission?Django为什么权限代码名称与检查它是否具有权限不同?
【发布时间】:2017-10-04 08:47:30
【问题描述】:

向我使用的组添加权限时:

managers.permissions.add(
            Permission.objects.get(codename='add_user')
        )

使用代号add_user

现在在检查用户是否具有特定权限时,我使用users.add_user 即。 app_name 前置

self.assertTrue(self.user.has_perm('users.add_user'))

为什么会这样。是否可以get 使用users.add_user 的权限。

当我尝试时,我得到:

django.contrib.auth.models.DoesNotExist: Permission matching query does not exist.

【问题讨论】:

    标签: python django permissions


    【解决方案1】:

    模型名称不是唯一的。您可以在不同的应用程序中拥有另一个 User 模型。在这种情况下,Permission.objects.get(codename='add_user') 会以 MultipleObjectsReturned 失败。因此使用类似这样的东西更安全:

    Permission.objects.get(codename='add_user', content_type__app_label='users', content_type__model='user')
    

    【讨论】:

    • 不幸的是,当我使用它时,我得到了django.contrib.auth.models.DoesNotExist: Permission matching query does not exist.
    • 好吧,检查 app_label 和 model 你的权限 content_type,并进行相应的过滤
    • 看错了,我的应用标签是users
    猜你喜欢
    • 1970-01-01
    • 2017-04-27
    • 2016-01-17
    • 2020-11-05
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    相关资源
    最近更新 更多