Django form.is_valid总是返回true

时间:2011-05-03 21:31:06

标签: python django validation

我是Django和python的新手,我正试图从一本书中学习它。在下面的代码中,我试图确保password1和password2是相同的,但它似乎没有运行clean_password2验证,因为它总是返回true,即使它们具有不同的值。

import re
from django.contrib.auth.models import User
from django import forms

class RegistrationForm(forms.Form):
    username = forms.CharField(label=u'Username', max_length=30)
    email = forms.EmailField(label=u'Email')
    password1 = forms.CharField(
        label= u'Password',
        widget = forms.PasswordInput()
    )
    password2 = forms.CharField(
        label= u'Password (Again)',
        widget = forms.PasswordInput()
    )

    def clean_password2(self):
        password1 = self.cleaned_data.get('password1')
        password2 = self.cleaned_data.get('password2')

        if password1 != password2:
            raise forms.ValidationError('Passwords do not match.')
        return password2

3 个答案:

答案 0 :(得分:3)

如果要清理两个相互依赖的字段,则应覆盖表单的clean()方法。您可以阅读更多here

答案 1 :(得分:1)

任何需要访问多个字段的验证器都应该是clean()方法而不是clean_<filedname>()方法的一部分。查看django-registration如何处理您正在寻找的内容:https://bitbucket.org/ubernostrum/django-registration/src/58eef8330b0f/registration/forms.py#cl-57

答案 2 :(得分:0)

您确定要检查form.is_valid()而不是form.is_valid吗?这是一种方法,而不是财产。