Уникальные поля Django ORM
Недавно начал изучать Django, и у меня возникла трудность с моделью. Мне нужно чтобы два поля одной модели не могли совпадать. То есть, у меня есть модель Profiles, где есть поля first_name и last_name. Я хочу чтобы пользователь не мог ввести одинаковые значения для этих двух полей. Единственное что я нашёл это unique и unique_together, которые позволяют сделать уникальными поля разных экземпляров модели. Но никак не влияют на уникальность внутри одного экземпляра. И у меня возникает вопрос, как такое поведение можно было бы реализовать.
Чтоб добавить ограничение на уровне БД, используйте CheckConstraint
:
class Profiles(models.Model):
first_name = models.CharField()
last_name = models.CharField()
class Meta:
constraints = [
models.CheckConstraint(
check=~models.Q(first_name=models.F("last_name")),
name='first_and_last_names_different'),
]
Альтернативный вариант проверять перед сохранением в переопределенном методе save
или в pre-save
сигнале.
Вариант с методом clean
в форме также можно использовать, нужно только понимать, что при создании объектов не через форму, такая проверка работать не будет. Так что, в дополнение к проверке в форме (это по сути проверка в UI), нужна обязательно проверка и, как минимум, в модели, а лучше на стороне БД.