Как поднять ошибку ValidationError в методе сохранения ModelForm в Django?
Я хочу, чтобы мой обработчик ошибок ModelForm показывал ошибки проверки из метода save()
так же, как и в методе clean()
- т.е. в виде предупреждения на форме администратора, а не генерировал страницу 500.
Поток кода выглядит следующим образом, в admin.py
:
class XForm(ModelForm):
def save(self, **kwargs):
super().save(**kwargs)
try:
self.instance.update_more_stuff_based_on_extra_fields_in_the_form()
except IntegrityError:
raise ValidationError(_("Earth to Monty Python."))
return self.instance
class XAdmin(admin.ModelAdmin):
form = XForm
admin.site.register(X, XAdmin)
В результате при возникновении ошибки проверки отладчик выдает страницу 500, а не предпочтительное предупреждение администратора.
Примечание: Следующий вопрос касается аналогичной проблемы, связанной с повышением ошибки проверки в методе сохранения модели. Здесь мы хотим вызвать ошибку в методе сохранения модели формы .
Вы можете создать собственный ModelAdmin для этой модели и переопределить метод 'save_model()'.
class XAdmin(admin.ModelAdmin):
form = XForm
def save_model(self, request, obj, form, change):
try:
obj.save()
except ValidationError as e:
for field, errors in e.message_dict.items():
form.add_error(field, errors)
return super().form_invalid(form)