Автоматическое исключение дубликатов категорий
У меня проблема с моделью категорий. У меня есть 2 таблицы:
class Category(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
name = models.CharField(max_length=30, null=False)
class Movie(models.Model):
category = models.ForeignKey(Category, on_delete=models.CASCADE, null=True)
name = models.CharField(max_length=30, null=False)
Таким образом, это стандартные модели с категориями. Пользователь может создать категорию, создав фильм с именем категории дополнительно. Проблема возникает, когда пользователь пытается создать фильм с именем категории, которая уже существует, потому что это создаст еще одну категорию с тем же именем (как дубликат), и я хочу избежать этого.
Как это сделать? Я не могу создать уникальное поле имени, потому что многие пользователи могут иметь одну и ту же категорию (но я могу использовать ManyToManyRelation), но все же я не знаю, как автоматически избежать дубликатов, как показано ниже:
- Если категория с таким именем и таким пользователем не существует > создайте категорию .
- Если категория с таким именем и таким пользователем существует > используйте эту категорию .
Приветствует
Хотя ваше объяснение нечеткое. Но из вашего объяснения кажется, что вы хотите, чтобы категории были уникальными для каждого пользователя. Разные пользователи могут иметь одинаковые категории, но один и тот же пользователь не может иметь ни одной дублирующейся категории.
для этого
class Category(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
name = models.CharField(max_length=30, null=False)
class Meta:
unique_together = ["user","name"] #This will
#make a constraint to check if both user and name is unique
Это предотвратит дублирование категорий. Просто установите unique
на True
.
class Category(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
name = models.CharField(max_length=30, unique=True)