Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对django表单run_validators()方法感到困惑_Django - Fatal编程技术网

对django表单run_validators()方法感到困惑

对django表单run_validators()方法感到困惑,django,Django,考虑这种形式: class LoginForm(forms.Form): email = forms.EmailField(label="Email", required = True) password = forms.CharField(label="Password", widget=forms.PasswordInput(), required=True) 当我验证表单时,我只希望使用一种错误方法:“无效的电子邮件和/或密码”,无论它是否是电子邮件字段、任何字段是否为空

考虑这种形式:

class LoginForm(forms.Form):
    email = forms.EmailField(label="Email", required = True)
    password = forms.CharField(label="Password", widget=forms.PasswordInput(), required=True)
当我验证表单时,我只希望使用一种错误方法:“无效的电子邮件和/或密码”,无论它是否是电子邮件字段、任何字段是否为空或密码/电子邮件的组合是否不正确

经过研究,我相信(除非我错了)我需要使用
运行_validators()
(来自django文档):“将所有错误聚合为一个ValidationError”)


但是,我不知道该如何定义它。

您所指的
运行验证程序
方法是按字段的方法,因此并不能真正解决您的问题。它聚合了多个按字段的验证程序,如“字段不能为空”、“不是电子邮件地址”等,以拉出第一个失败的验证程序

如果您希望显示该消息时出现任何错误,我将在模板中处理它

您可以将您的需求重新表述为“如果表单无效,则显示一条错误消息”,否则,请成功登录

{% 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
这也将考虑到非字段错误,因为它们在同一个目录中