Я пытаюсь добавить разрешение «view_user» для модели пользователя в Django. Я добавил прокси-модель:
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.
что, на мой взгляд, связано с тем, что app_label пользователя Django — auth
, а app_label RodanUser — 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), потому что модель без прокси добавит разрешение в БД, где content_type_id указывает на RodanUser вместо пользователя.
Я нашел это, что объясняет, почему я не могу использовать прокси с разрешения. Любые другие предложения?