Имя пользователя 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)
            )
        ]
Вернуться на верх