Проверка поля Django в модели и в Admin?

Я хочу определить свою собственную процедуру проверки для конкретного поля модели Django. Я хочу, чтобы сообщение об ошибке отображалось в форме администратора, но я также хочу, чтобы такая же проверка выполнялась, если сущность была сохранена собственным кодом на Python. Есть ли способ сделать это, не нарушая принцип DRY?

Ответ 1

Если вы хотите проверить отдельное поле, вы можете написать валидатор и добавить его в поле модели.

Валидатор будет запускаться для поля всякий раз, когда вызывается метод full_clean. Он будет запускаться всякий раз, когда модельная форма будет проверена (в том числе и в администраторе Django), но она не будет автоматически запускаться, когда экземпляр модели будет сохранен - ​​вы должны вызвать full_clean вручную в коде python.

m = MyModel(x=20)
m.full_clean() # may raise ValidationError
m.save()

Если вы хотите заставить валидатор запускаться всякий раз, когда модель сохраняется, вы можете переопределить метод сохранения и вызвать full_clean там. Обратите внимание, что это приведет к тому, что проверка будет выполняться дважды при использовании форм модели и администратора django.