2011-02-13 12 views
0

我有模型稱爲EmailHistory與領域的一個看起來像這樣的:破例在EmailField驗證在Django

from_email = models.EmailField(verbose_name="From:") 

我創建了一個的ModelForm和希望,除非它被設置爲「匿名驗證電子郵件地址」。我嘗試了以下,無濟於事。

class EmailForm(ModelForm): 
    class Meta: 
     model = EmailHistory 
     exclude = ('to_email') 

    to_emails = forms.CharField() 

    def clean_from_email(self): 

     from_email = self.cleaned_data['from_email'] 
     if from_email == "Anonymous": 
      return from_email 
     else: 
      return super(EmailForm, self).clean_from_email(); 

回答

0

我懷疑的問題是,作爲the documentation解釋說,潛在的表單域的clean方法 - 這反過來又運行驗證 - 在窗體本身的具體clean_form_field方法之前運行。您可能需要在表單中使用正常的CharField,並將電子郵件驗證自行添加到clean方法中。

0

我無法在沒有重新定義from_email的情況下工作。因此,我重新定義了它,然後使用django.core.validators.validate_email進行了電子郵件驗證:

class EmailForm(ModelForm): 
    class Meta: 
     model = EmailHistory 
     exclude = ('to_email') 

    to_emails = forms.CharField() 
    from_email = forms.CharField(required=True) 

    def clean_from_email(self): 
     from_email = self.cleaned_data['from_email'] 
     if from_email == "Anonymous": 
      from_email = "[email protected]" 

     validate_email(from_email) 

     return from_email