Как поднять ошибку 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)
Вернуться на верх