2016-06-26 76 views
-3

可以說我有模式:Django的 - 驗證字符字段作爲電子郵件

class Subscription(models.Model): 
    address = models.CharField(max_length=255) 

然後創建形式:

class SubscriptionForm(ModelForm): 
    class Meta: 
     model = Subscription 
     fields = ['address'] 
    def clean_address(self): 
     email = self.cleaned_data['address'] 
     #VALIDATE HERE IF IT IS EMAIL 
     return email 

如何申請email validator到我場不改變模式

編輯:這甚至有可能嗎?

+6

爲什麼重新發明輪子時,你有'EmailField'? https://docs.djangoproject.com/en/1.9/ref/models/fields/#emailfield – DeepSpace

+0

只需在表單中手動調用電子郵件驗證器?...您嘗試過什麼? – Sayse

+0

但我該如何做到這一點? –

回答

0

添加一個驗證你的CharFieldvalidator領域:

from django.core.validators import EmailValidator 

emailvalidator = EmailValidator(message="invalid email") 

class Subscription(models.Model): 
    address = models.CharField(max_length=255, validators=[emailvalidator]) 

但是,你應該考慮使用EmailField代替。

+0

但我可以在SubscriptionForm類中做到嗎? –

+0

'SubscriptionForm'是'ModelForm',因此它可以從模型中進行驗證。如果你想在表單字段中明確地指定驗證器,你應該考慮使用'Form'的子類並將同一個電子郵件驗證器傳遞給'address'表單域 –

1

你最好在模型中設置驗證器。添加驗證程序不會影響數據庫,因此它不會真的改變數據庫模型。

但是如果你真的想調用驗證器,那就這樣做。

from django.core.validators import EmailValidator 
def clean_address(self): 
    email = self.cleaned_data['address'] 

    EmailValidator()(email)