我有以下表格:
class SignupForm(forms.ModelForm):
time_zone = forms.ChoiceField(choices=TIMEZONE_CHOICES)
email = forms.EmailField()
confirm_email = forms.EmailField()
password1 = forms.CharField(widget=forms.PasswordInput())
password2 = forms.CharField(widget=forms.PasswordInput())
class Meta:
model = Customer
fields = (
'first_name',
'last_name',
'coupon_code'
)
def clean_email(self):
email = self.cleaned_data['email']
print 'email cleaned data: '+cleaned_data
try:
User.objects.get(email=email)
raise forms.ValidationError('Email already exists.')
except User.DoesNotExist:
return email
def clean_confirm_email(self):
print '-----'
print 'confirm email cleaned data: '+cleaned_data
email = self.cleaned_data['email']
confirm_email = self.cleaned_data['confirm_email']
if email != confirm_email:
raise forms.ValidationError('Emails do not match.')
return confirm_email
打印:
email cleaned data:
{'coupon_code': u'coup', 'first_name': u'Gina', 'last_name': u'Silv', 'time_zone': u'America/New_York', 'email': u'4email@example.net'}
-----
confirm email cleaned data:
{'first_name': u'Gina', 'last_name': u'Silv', 'confirm_email': u'4email@example.net', 'time_zone': u'America/New_York', 'coupon_code': u'coup'}
当这个运行时我得到错误:
key error 'email' self.cleaned_data['email']
如何访问clean_confirm_email
方法中的电子邮件字段?
答案 0 :(得分:2)
您不应该在clean_confirm_email()
方法中执行该验证。相反,按照推荐的clean()
方法进行,如下所示:
def clean(self):
cleaned_data = super(SignupForm, self).clean()
email = cleaned_data.get("email")
confirm_email = cleaned_data.get("confirm_email")
if email and confirm_email:
# Only do something if both fields are valid so far.
if email != confirm_email:
raise forms.ValidationError("Emails do not match.")
return cleaned_data