困惑于django形式的run_validators()方法

时间:2011-03-15 01:22:56

标签: django

考虑这种形式:

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中”)

但是我对如何定义它感到困惑。

1 个答案:

答案 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

这也会处理非字段错误,因为它们在同一个字典中。