我正在尝试向 Django 中的用户模型添加权限“view_user”。我添加了一个代理模型:
from django.contrib.auth.models import User, Permission
from django.db import models
class RodanUser(User):
class Meta:
proxy = True
permissions = (
('view_user', 'View User'),
)
但我得到错误:
ContentType matching query does not exist.
在我看来是因为 Django 的 User 的 app_label 是,auth
但 RodanUser 的 app_label 是rodan
所以我更改了模型并添加了 app_label:
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/
最奇怪的是,我实际上能够通过首先添加一个非代理模型来使其工作:
from django.contrib.auth.models import User, Permission
from django.db import models
class RodanUser(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
class Meta:
permissions = (
('view_rodanuser', 'View Rodan User'),
)
然后从上面将其更改为代理模型(没有 app_label),因为非代理模型将在 DB 中添加权限,其中 content_type_id 指向 RodanUser 而不是 User。
我发现这解释了为什么我不能在获得许可的情况下使用代理。还有其他建议吗?