Поднять ValidationError из метода сохранения модели django?
Мне нужно создать исключение в методе сохранения модели. Я надеюсь, что существует исключение, которое будет обнаружено любым django ModelForm
, который использует эту модель, включая формы администратора.
Я попытался поднять django.forms.ValidationError
, но это, похоже, не удалось обработать формы администратора. Модель выполняет удаленный вызов процедуры в течение экономии времени, и она не известна до этого вызова, если вход действителен.
Спасибо, Пит
Ответы
Ответ 1
В настоящее время нет способа выполнить проверку в методах сохранения модели. Это, однако, разрабатывается как отдельная ветвь валидации модели и в ближайшие несколько месяцев следует объединить в магистраль.
Тем временем вам нужно выполнить проверку на уровне формы. Очень просто создать подкласс ModelForm
с помощью метода clean()
, который делает ваш удаленный вызов и соответственно создает исключение, и использовать его как в админке, так и в качестве основы для ваших других форм.
Ответ 2
Начиная с Django 1.2, это то, что я делал:
class MyModel(models.Model):
<...model fields...>
def clean(self, *args, **kwargs):
if <some constraint not met>:
raise ValidationError('You have not met a constraint!')
super(MyModel, self).clean(*args, **kwargs)
def full_clean(self, *args, **kwargs):
return self.clean(*args, **kwargs)
def save(self, *args, **kwargs):
self.full_clean()
super(MyModel, self).save(*args, **kwargs)
Это полезно для работы как внутри, так и снаружи администратора.