Как разрешить изменение поля модели, если пользователь имеет определенную роль?
У меня есть CustomUserModel в Django и четыре роли - пользователь, студент, куратор, администратор. И у меня есть поле group в CustomUserModel, которое по умолчанию имеет значение Null
Теперь каждый пользователь может иметь группу, но я хочу, чтобы она была только у студентов. Как я могу сделать это на уровне моей модели? (например, как проверить, что для изменения значения поля group с Null на другое необходимо иметь роль Student)
Я пытался использовать валидатор, но там я могу получить только значение группы, и не могу использовать self для проверки, например, если self.role = STUDENT
USER = 'user'
STUDENT = 'student'
CURATOR = 'curator'
ADMIN = 'admin'
ROLES = (
(USER, USER),
(STUDENT, STUDENT),
(CURATOR, CURATOR),
(ADMIN, ADMIN),
)
def validate_user_can_have_group(value):
###
class User(AbstractUser):
role = models.CharField(max_length=max([len(role[0]) for role in ROLES]),
choices=ROLES,
default=USER,)
group = models.ForeignKey('structure.Group',
on_delete=models.SET_NULL,
validators=[validate_user_can_have_group],
related_name='users',
blank=True,
null=True,)
class Meta:
swappable = "AUTH_USER_MODEL"
ordering = ['username']
@property
def is_admin(self):
return (
self.role == ADMIN or self.is_staff
or self.is_superuser
)
@property
def is_curator(self):
return self.role == CURATOR
@property
def is_student(self):
return self.role == STUDENT
@property
def is_user(self):
return self.role == USER
def __str__(self):
return self.username