Django为什么权限代码名称不同于检查其是否具有权限? [英] Django why is a permissions code name different from checking if it has a permission?

查看:74
本文介绍了Django为什么权限代码名称不同于检查其是否具有权限?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

When adding a permission to a group I use:

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

使用代号 add_user

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

Now when checking if a user has a particular permission, I use users.add_user ie. the app_name prepended

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

这是为什么。是否可以通过 users.add_user 获得权限。

Why is that. Is it possible to get the permission with users.add_user.

尝试时得到:

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


推荐答案

模型名称不是唯一的。您可以在其他应用程序中使用另一个 User 模型。在这种情况下, Permission.objects.get(codename ='add_user')会失败,并显示 MultipleObjectsReturned 。因此,使用sth这样更安全:

Model names aren't unique. You could have another User model in a different app. Permission.objects.get(codename='add_user') would fail with a MultipleObjectsReturned in that case. It is therefore safer to use sth like:

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

这篇关于Django为什么权限代码名称不同于检查其是否具有权限?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆