我有一个 Django 模型,我想进行涉及多个字段的验证。但是,我想在管理页面中的特定字段上显示验证错误,而不是全局显示。
在 clean 函数中引发验证错误时,它总是在管理页面的顶部显示错误,请参阅示例:
我虽然关于使用字段验证器,但因为我的验证是在模型级别而不是在字段级别,所以它没有帮助(我只能访问字段的值,而不能访问整个模型实例)
所以我今天也遇到了同样的问题。我混合了非现场错误和现场错误,我希望它们都发生在正确的位置。我很难在一个地方找到 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 }}
。