如何在django中覆盖password_change错误消息?

时间:2011-03-14 15:33:36

标签: django validation templates forms

我在网上花了很多年,如何覆盖django中的change_password表单。我创建了表单,我可以成功更改密码。现在我想在页面上显示我的错误。 (顺便说一下,我正在使用django-registration。)

问题是我必须更改错误消息。在我的模板中,我使用此函数来显示new_password1错误:

{% if form.new_password1.errors %}
     <div class="error_message"> blah </div>
{% endif %}

但它包含所有new_password1错误。我查看了文档,发现CharField只有reqiured,max和min。我需要检查new_password1的每个特定错误(确认错误,所需错误和最小值,最大值)并生成我自己的错误消息。由于CharField没有匹配的关键字,我在forms.py中尝试了一个干净的方法,如下所示:

 def clean_password2(self):                                                                                                                                                                                                                               
        if  'new_password1' in self.cleaned_data and 'new_password2' in self.cleaned_data:                                                                                                                                                                   
            if self.cleaned_data['new_password1'] != self.cleaned_data['new_password2']:                                                                                                                                                                     
                raise forms.ValidationError(_(u"no match"))                                                                                                                                                                                                

        return cleaned_data   

最后,我不知道如何在我的模板中检查这个clean_password2验证。当我写注册页面时,我可以通过循环错误来显示我的所有错误。它显示所有重写错误。这次它不起作用。所以我的问题是:

1-如何检查模板中的所有特定错误?比如form.new_password1.required.errors

2-如何显示此clean_password2消息?

2 个答案:

答案 0 :(得分:2)

在django-speak中,你所指的是视图是模板。这相当令人困惑!

更新:我看到您定义了clean_password2功能,但您正在检查名为new_password1new_password2的字段。

除非您有一个名为password2的字段,否则 是您的clean方法正在验证的字段。

clean_password2生成{{ form.password2.errors }}的消息,但对我而言,听起来您没有名为password2的字段。

将方法名称更改为clean_new_password2

{% if form.new_password1.errors %}{{ form.new_password1.errors }}{% endif %} 
{% if form.new_password2.errors %}{{ form.new_password2.errors }}{% endif %}

每个字段的表单字段清理工作..您可以访问字段对象的错误。

答案 1 :(得分:0)

与@Yuji一样,请在模板中使用{% if form.non_field_errors %}

现在只谈一下可用性。对于用户注册和密码更改表单,您可以预期的唯一非字段错误将是密码不匹配,因此与您最初打印非字段错误的其他表单不同,对于这些表单,打印是有意义的两个密码输入字段之前的一个非字段错误,可能将它们包装在具有红色背景的父级中,以使两个字段的值相关并且错误涉及两个字段,而不是形式一般。