最初,报错的form表单验证部分如下:
class ChangePwdForm(forms.Form):password1 = forms.CharField(required=True, min_length=6)password2 = forms.CharField(required=True, min_length=6)def clean(self):pwd1 = self.cleaned_data['password1']pwd2 = self.cleaned_data['password2']if pwd2 != pwd1:raise forms.ValidationError("密码不一致")return self.cleaned_data
经过查阅资料后发现,如果password1
字段不能满足定义的要求(最小六个字符长度)的话,就不会出现在cleaned_data
中,因此clean
方法在取值时发生错误。
根据上面的原理,我们只要先验证其是否在cleaned_data
中,再判断其是否相等就可以了。具体修改如下:
class ChangePwdForm(forms.Form):password1 = forms.CharField(required=True, min_length=6)password2 = forms.CharField(required=True, min_length=6)def clean(self):if 'password1' in self.cleaned_data and 'password2' in self.cleaned_data and self.cleaned_data['password1'] != \self.cleaned_data['password2']:raise forms.ValidationError("密码不一致")return self.cleaned_data