考虑这种形式:
class LoginForm(forms.Form):
email = forms.EmailField(label="Email", required = True)
password = forms.CharField(label="Password", widget=forms.PasswordInput(), required=True)
当我验证表单时,我只想使用一种错误方法:'无效的电子邮件和/或密码',这不管它是不是电子邮件字段,任何字段是空白,还是组合密码/电子邮件不正确。
经过研究,我相信(除非我错了)我需要使用run_validators()
(来自django docs:“将所有错误汇总到一个ValidationError中”)
但是我对如何定义它感到困惑。
答案 0 :(得分:0)
您指向的run_validators
方法是每字段方法,因此无法真正解决您的问题。它汇总了多个每个字段的验证器,如“字段不能为空”,“不是电子邮件地址”等,以便拔出第一个失败的验证器。
如果您想要显示该消息的任何错误,我只会在模板中处理它。
您可以将您的要求改为“如果表单无效,则显示一条错误消息”,否则,请成功登录。
{% if form.errors %}
invalid email and/or password
{% endif %}
我没有看到你为什么要修改你的表格以获得相同的终极效果的理由,但我认为这没什么好玩的。
如果您因任何原因需要每个字段错误,这里是我提出的解决所有错误的解决方案。
def clean(self):
for key, value in self._errors.iteritems():
self._errors[key] = self.error_class(['invalid email and/or password'])
return self.cleaned_data
这也会处理非字段错误,因为它们在同一个字典中。