我正在尝试在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,这解释了为什么我不能在许可下使用代理。还有其他建议吗?
答案 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)
迁移后添加权限。