Django 为什么权限代号与检查是否有权限不同?

sur*_*190 4 python django permissions

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

managers.permissions.add(
            Permission.objects.get(codename='add_user')
        )
Run Code Online (Sandbox Code Playgroud)

使用代号 add_user

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

self.assertTrue(self.user.has_perm('users.add_user'))
Run Code Online (Sandbox Code Playgroud)

这是为什么。是否可以get通过users.add_user.

当我尝试时,我得到:

django.contrib.auth.models.DoesNotExist: Permission matching query does not exist.
Run Code Online (Sandbox Code Playgroud)

sch*_*ggl 5

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

Permission.objects.get(codename='add_user', content_type__app_label='users', content_type__model='user')
Run Code Online (Sandbox Code Playgroud)