添加可识别的非字段错误
Adding iddentifiable non-field errors
我正在 ModelForm
中的 clean
方法中进行一些自定义验证。我想添加自定义非字段错误消息,但我需要它们可以通过某种键来识别,所以这不起作用:
self.add_error(None, 'Custom error message 1')
self.add_error(None, 'Custom error message 2')
self.add_error(None, 'Custom error message 3')
我需要能够区分这些,以便将它们呈现在无效表单模板中的适当位置,而不是将它们全部分组为 None
非字段错误。
我该怎么做?
使用 ValidationError
class,它在其初始化程序中支持 code
参数。然后不是获取 non_field_errors()
的字符串,而是获取实际的 data
:
self.add_error('__all__', ValidationError("Custom error message", code="type1")
...
for error in self.non_field_errors().data: # non_field_errors() returns an ErrorList instance
print(error.code)
我认为在 django 中没有标准的方法可以做到这一点。但是如果你真的想要的话,你可以实现你自己的小方法。
class MyForm(forms.Form):
def add_non_field_error(self, group, error):
errors = self._errors.setdefault(group, self.error_class(error_class='nonfield'))
errors.append(error)
f = MyForm(data={})
f.is_valid() # True
f.add_non_field_error('no_field', 'This is an error.')
f.is_valid() # False
f.errors # {'no_field': ['This is an error.']}
我正在 ModelForm
中的 clean
方法中进行一些自定义验证。我想添加自定义非字段错误消息,但我需要它们可以通过某种键来识别,所以这不起作用:
self.add_error(None, 'Custom error message 1')
self.add_error(None, 'Custom error message 2')
self.add_error(None, 'Custom error message 3')
我需要能够区分这些,以便将它们呈现在无效表单模板中的适当位置,而不是将它们全部分组为 None
非字段错误。
我该怎么做?
使用 ValidationError
class,它在其初始化程序中支持 code
参数。然后不是获取 non_field_errors()
的字符串,而是获取实际的 data
:
self.add_error('__all__', ValidationError("Custom error message", code="type1")
...
for error in self.non_field_errors().data: # non_field_errors() returns an ErrorList instance
print(error.code)
我认为在 django 中没有标准的方法可以做到这一点。但是如果你真的想要的话,你可以实现你自己的小方法。
class MyForm(forms.Form):
def add_non_field_error(self, group, error):
errors = self._errors.setdefault(group, self.error_class(error_class='nonfield'))
errors.append(error)
f = MyForm(data={})
f.is_valid() # True
f.add_non_field_error('no_field', 'This is an error.')
f.is_valid() # False
f.errors # {'no_field': ['This is an error.']}