我是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
答案 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
吗?这是一种方法,而不是财产。