Django为什么权限代码名称与检查它是否具有权限不同?
问题描述:
当添加许可我使用一组:Django为什么权限代码名称与检查它是否具有权限不同?
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'))
这是为什么。 users.add_user
是否可以get
的权限。
当我尝试它,我得到:
django.contrib.auth.models.DoesNotExist: Permission matching query does not exist.
答
型号名称不是唯一的。您可以在另一个应用中使用另一个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:权限匹配查询不exist.' – surfer190
好吧,看看app_label及模型研究您的权限content_type,并相应地进行过滤 – schwobaseggl
Spot on,我的错误是我的应用标签是'users' – surfer190