2016-06-26 15 views
-3

は私がモデルを持っていると言うことができます電子メールとして文字フィールドを検証:ジャンゴ -

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を適用することができます。

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

が、私は、フォームを作成しますか?

編集:これも可能ですか?

+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)