Я бы начал изучать модель проверки модели.http: https://docs.djangoproject.com/en/2.0/ref/models/instances/#django.db.models.Model.clean
Он используется ModelForms
и имеет большой смысл начать его использовать.
По сути, вы бы определили метод clean()
в своей модели, вставьте свою логику проверки и поднимите ValidationError
, если он потерпит неудачу.
class MyModel(models.Model):
def clean(self):
from django.core.exceptions import ValidationError
if self.start_data > self.end_date:
raise ValidationError('Start date cannot precede end date')
def save(self, *args, **kwargs):
# you can have regular model instance saves use this as well
super(MyModel, self).save(*args, **kwargs)
Преимущество здесь в том, что любой ModelForm
(что означает, что администраторский сайт тоже будет вызывать full_clean()
, который, в свою очередь, вызывает вашу модель clean()
без дополнительной работы.
Нет необходимости переопределять save_model
, вы получите обычные ошибки проверки в верхней части формы администратора.
Наконец, это очень удобно. Вы можете использовать его где угодно.
try:
my_model.full_clean()
except ValidationError, e:
# Do something based on the errors contained in e.message_dict.
# Display them to a user, or handle them programatically.