У меня есть модель с UniqueConstraint
:
class MyModel(models.Model)
name = models.CharField()
title = models.CharField()
class Meta:
constraints = [ models.UniqueConstraint(
fields=['name', 'title'],
name="unique_name_and_title") ]
Это отлично работает и вызывает IntegrityError
, когда создаются 2 объекта с одинаковыми значениями.
Проблема в том, что UniqueConstraint
не дает пользователю красивого ValidationError
. Обычно я добавляю их в класс Model.clean()
, но если я это сделаю, он не будет работать на Update
, потому что обновляемый экземпляр уже будет присутствовать:
def clean(self):
if MyModel.objects.filter(title=self.title, name=self.name):
raise ValidationError({'title':'An object with this name+title already exists'})
I Как мне создать ValidationError
, который проходит, если это ОБНОВЛЕНИЕ, а не ВСТАВКА?
Я знаю, что могу сделать это на ModelForm
и использовать self.instance
, чтобы проверить, существует ли уже экземпляр, но я хочу применить это в класс Model и не нужно полагаться на ModelForm.