Лучшая практика 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
, в то же время база данных будет по-прежнему обеспечивать, чтобы не существовало двух записей с одинаковыми именами.