Имя пользователя Django уникально только для активного пользователя
Я создал пользовательскую модель User с полем username (поле char) и active (поле boolean). Поле username должно быть уникальным, только когда пользователь активен, в противном случае я хочу переименовать пользователя в "неактивного", чтобы имя пользователя могло быть повторно использовано другим пользователем. Как это можно сделать? Я пробовал это, но выдает ошибку:
class User(models.Model):
username = models.CharField(max_length=30, unique=isActive())
active = models.BooleanField(default=True)
def isActive(self):
return self.active
Вы можете работать с UniqueConstraint
[Django-doc] с condition=…
:
from django.db.models import Q
class User(models.Model):
username = models.CharField(max_length=30)
active = models.BooleanField(default=True)
class Meta:
constraints = [
models.UniqueConstraint(
fields=('username',), condition=Q(active=True)
)
]