我希望我的 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 页,而不是首选的管理警告。
注意:以下问题解决了在模型的保存方法中引发验证错误的类似问题。这里我们要在模型form的保存方法中提出错误。
您可以为此模型创建自定义 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)