Лучшая практика Django: убедитесь, что имя пользователя User.username уникально даже при удалении пользователя

Хотелось бы узнать ваши мысли о лучшей практике Django для обеспечения уникальности значения поля, даже если объекты удалены.

Например, я создаю CustomerUser с именем пользователя = "carlos", удаляю этого пользователя, затем, если я создам другого CustomerUser с именем пользователя = "carlos", я получу ошибку.

models.py

class CustomUser(models.Model):
      username = models.CharField(max_length=100 , unique=True)

shell

user_one = CustomUser.objects.create(username="carlos")
user_one.delete()
user_two = CustomUser.objects.create(username="carlos") ---> This should not be possible.

Нужно ли мне сохранять в другой модели все созданные имена пользователей или есть функция Django, которая гарантирует, что уникальность имени пользователя будет всегда True даже после удаления объекта?

Спасибо

Вы можете попробовать следующее:

class CustomUser(models.Model):
      username = models.CharField(max_length=100 , unique=True)
      is_deleted = models.BooleanField(default=False)

Тогда просто обновите is_delete на True и отфильтруйте пользователей в соответствии с этим.

user_one = CustomUser.objects.create(username="carlos")
user_one.is_delete = True
user_one.save()

Во время фильтрации вы делаете что-то вроде этого:

user_one = CustomUser.objects.filter(is_delete=False)

Вы можете использовать пакет типа django-soft-delete. Этот пакет не удалит запись, но добавит дополнительный BooleanField с именем is_deleted, который будет установлен в True на случай удаления объекта. Но сама запись по-прежнему существует.

Таким образом, пакет будет переопределять метод .delete() объекта модели, а также использовать менеджеры записей, которые, например, будут подсчитывать количество записей с is_deleted, установленным в False, в то же время база данных будет по-прежнему обеспечивать, чтобы не существовало двух записей с одинаковыми именами.

Вернуться на верх