Основной шаблон, который я нашел полезным, - поместить всю мою пользовательскую проверку в clean()
, а затем просто вызвать full_clean()
(которая вызывает clean()
и несколько других методов) изнутри save()
, например:
class BaseModel(models.Model):
def clean(self, *args, **kwargs):
# add custom validation here
super(BaseModel, self).clean(*args, **kwargs)
def save(self, *args, **kwargs):
self.full_clean()
super(BaseModel, self).save(*args, **kwargs)
Это не сделано по умолчанию, как объяснено здесь , потому что это мешает определенным функциям, но это не проблема для моего приложения.