Я хочу определить свою собственную процедуру проверки для конкретного поля модели Django. Я хочу, чтобы сообщение об ошибке отображалось в форме администратора, но я также хочу, чтобы такая же проверка выполнялась, если сущность была сохранена собственным кодом на Python. Есть ли способ сделать это, не нарушая принцип DRY?
Проверка поля Django в модели и в Admin?
Ответ 1
Если вы хотите проверить отдельное поле, вы можете написать валидатор и добавить его в поле модели.
Валидатор будет запускаться для поля всякий раз, когда вызывается метод full_clean
. Он будет запускаться всякий раз, когда модельная форма будет проверена (в том числе и в администраторе Django), но она не будет автоматически запускаться, когда экземпляр модели будет сохранен - вы должны вызвать full_clean
вручную в коде python.
m = MyModel(x=20)
m.full_clean() # may raise ValidationError
m.save()
Если вы хотите заставить валидатор запускаться всякий раз, когда модель сохраняется, вы можете переопределить метод сохранения и вызвать full_clean
там. Обратите внимание, что это приведет к тому, что проверка будет выполняться дважды при использовании форм модели и администратора django.