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') 
+0

不幸的是,当我用这个,我得到'django.contrib.auth.models.DoesNotExist:权限匹配查询不exist.' – surfer190

+0

好吧,看看app_label及模型研究您的权限content_type,并相应地进行过滤 – schwobaseggl

+0

Spot on,我的错误是我的应用标签是'users' – surfer190