在 django 中的 clean 函数中的特定字段上引发 ValidationError

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

我有一个 Django 模型,我想进行涉及多个字段的验证。但是,我想在管理页面中的特定字段上显示验证错误,而不是全局显示。

在 clean 函数中引发验证错误时,它总是在管理页面的顶部显示错误,请参阅示例:

我虽然关于使用字段验证器,但因为我的验证是在模型级别而不是在字段级别,所以它没有帮助(我只能访问字段的值,而不能访问整个模型实例)

django django-admin
2个回答
0
投票

所以我今天也遇到了同样的问题。我混合了非现场错误和现场错误,我希望它们都发生在正确的位置。我很难在一个地方找到 Django 文档中的所有相关信息,但我最终找到了足够多的资源将所有内容拼凑在一起。 (顺便说一句,可能有不止一种方法可以做到这一点,请注意,我正在使用 Django 4.2)。

我没有深入了解这一切背后的原因,但我模糊的理解是必须从清理后的数据中删除字段(由

super().clean()
处理。调用
self.add_error(field, error_list)
会自动从数据中删除字段)
cleaned_data
。要添加非字段错误,您只需提供
field
参数作为
None

这是一个例子:

class myform(Form):
    f1 = CharField()
    f2 = CharField()
    def clean(self):
        super().clean()
        if "bad" in self.cleaned_data["f1"]:
            self.add_error("f1", ValidationError("invalid f1"))
        if "bad" in self.cleaned_data["f2"]:
            self.add_error("f2", ValidationError("invalid f1"))
        if not (self.cleaned_data["f1"] and self.cleaned_data["f2"]):
            self.add_error(None, ValidationError("Either f1 or f2 must be supplied"))

要使它们显示在模板中所需的位置,请在您希望它们显示的位置使用

{{ form.f1.errors }}
{{ form.f2.errors }}
{{ form.non_field_errors }}


-1
投票

使用

add_error()
方法

self.add_error(fieldname, forms.ValidationError(message))
© www.soinside.com 2019 - 2024. All rights reserved.