2014-05-13 70 views
0

我有形式:为什么clean_data中没有字段?

class ChangePasswordForm(forms.Form): 
    oldpassword = forms.CharField(
     min_length=5, 
     label=_('Old password'), 
     widget=forms.PasswordInput(), 
    ) 
    password1 = forms.CharField(
     min_length=5, 
     label=_('Password'), 
     widget=forms.PasswordInput(), 
    ) 
    password2 = forms.CharField(
     min_length=5, 
     label=_('Retype'), 
     widget=forms.PasswordInput(), 
    ) 

    def clean(self): 
     if self.cleaned_data['password1'] != self.cleaned_data['password2']: 
      raise forms.ValidationError(_('The new passwords must be the same')) 
     else: 
      return self.cleaned_data 

如果我输入到所有领域,我得到POST:

{u'password1': [u'ewrtrwetwe'], u'csrfmiddlewaretoken': [u'2gEAqLjaKC5NgMZrE6Brd9p3vThUC10w'], u'oldpassword': [u'wertwertwet'], u'password2': [u'tewrtwertwert']} 

和cleaned_data:

{'password1': u'ewrtrwetwe', 'password2': u'tewrtwertwert', 'oldpassword': u'wertwertwet'} 

但如果我输入密码1相同的文字和password2输入我得到POST:

{u'password1': [u'1234'], u'csrfmiddlewaretoken': [u'2gEAqLjaKC5NgMZrE6Brd9p3vThUC10w'], u'oldpassword': [u'wertwertwet'], u'password2': [u'1234']} 

和cleaned_data:

{'oldpassword': u'wertwertwet'} 

,我得到一个错误:

if self.cleaned_data['password1'] != self.cleaned_data['password2']: 
KeyError: 'password1' 

为什么?

回答

0

您没有在clean()方法中获得cleaned_data。你需要更是这样写的:

def clean(self): 
    cleaned_data = super(ChangePasswordtForm, self).clean() 
    # Do things 
    return cleaned_data 

此外,你应该总是return cleaned_data,即使你raise ValidationError(不再是真实的Django的1.7+)

相关问题