在Django中添加用户模型的权限

时间:2016-08-15 15:28:38

标签: django permissions contenttype

我正在尝试在Django中向User模型添加权限'view_user'。我添加了一个代理模型:

ContentType matching query does not exist.

但是我收到了错误:

auth

在我看来是因为Django用户的app_label是{​​{1}}但是RodanUser的app_label是{​​{1}} 所以我改变了模型并添加了app_label:

rodan

现在我收到了错误:

from django.contrib.auth.models import User, Permission


class RodanUser(User):
    class Meta:
        proxy = True
        permissions = (
            ('view_rodanuser', 'View User'),
        )
        app_label = 'auth'

最奇怪的是,我实际上是通过首先添加一个非代理模型来实现这个目的:

MixedContentTypeError at /users/

然后从上面将其更改为代理模型(没有app_label),因为非代理模型将在DB中添加权限,其中content_type_id指向RodanUser而不是User。

我找到了this,这解释了为什么我不能在许可下使用代理。还有其他建议吗?

1 个答案:

答案 0 :(得分:1)

我通过使用另一种方法解决了这个问题: 在我项目的__init__.py中,我添加了:

@receiver(post_migrate)
def add_user_view_permissions(sender, **kwargs):
    content_type = ContentType.objects.get(app_label='auth', model='user')
    Permission.objects.get_or_create(codename='view_user', name='View User', content_type=content_type)

迁移后添加权限。