2014-12-04 53 views
0

我有以下形式:如何檢查確認電子郵件同樣在Django

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'[email protected]'} 
----- 
confirm email cleaned data: 
{'first_name': u'Gina', 'last_name': u'Silv', 'confirm_email': u'[email protected]', 'time_zone': u'America/New_York', 'coupon_code': u'coup'} 

在運行此我得到的錯誤:

key error 'email' self.cleaned_data['email'] 

我如何訪問clean_confirm_email方法中的電子郵件字段?

回答

1

您不應該在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 

此處瞭解詳情:https://docs.djangoproject.com/en/1.6/ref/forms/validation/#cleaning-and-validating-fields-that-depend-on-each-other