Django为什么权限代码名称不同于检查其是否具有权限? [英] Django why is a permissions code name different from checking if it has a permission?
问题描述
向组添加权限时,我使用:
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屋!