如何在 Django 中的 ModelForm 的 save 方法中引发 ValidationError?

问题描述 投票:0回答:1

我希望我的 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的保存方法中提出错误。

django validation django-models django-admin
1个回答
0
投票

您可以为此模型创建自定义 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)
© www.soinside.com 2019 - 2024. All rights reserved.