2016-05-19 13 views
1

私は送信時にメールを受け取ったことをユーザーに伝えたいと思います。私の購読フォームで、私はこのコードを持っています。既にメールが取られています(試してみてください)

def clean_email(self): 
    try: 
     emailCheck = User.objects.filter(username=self.cleaned_data['email']) 
    except User.DoesNotExist: 
     raise ValidationError('Email already exists') 

ユーザーが正しいデータを挿入したときに問題が発生するため、try/exceptを使用する必要があります。

答えて

2

existsを使用してください。

クエリセットに結果が含まれている場合はTrueを、そうでない場合はFalseを返します。 getを使用

は、検証のこの種の不必要な未満パフォーマンスであるユーザーオブジェクトを返します。

if User.objects.filter(username=self.cleaned_data['email']).exists(): 
    raise ValidationError('Email already exists') 

またジャンゴでusernameフィールドは、実際に電子メールをうまく再生できない30個の文字を使用できることを知って興味があるかもしれません。 Django 1.10には、この制限を最大150文字にするための移行があります。

+3

はい、 '.exists()'メソッドは、存在を確認するためにここで使う方が良いです。 –

+1

私はいくつかのメモを取る、あなたの助けてくれてありがとう:) –

2

.filter()メソッドは、DoesNotExist例外を発生させません。代わりに.get()メソッドを使用して例外を発生させる必要があります。オブジェクトが 所与のパラメータについて見つからなかった場合Django QuerySet docs:

get()から

DoesNotExist例外を発生させます。この例外は、モデル クラスの属性です。

def clean_email(self): 
    try: 
     emailCheck = User.objects.get(username=self.cleaned_data['email']) 
    except User.DoesNotExist: 
     raise ValidationError('Email already exists') 

注:特定のusernameを持つユーザが存在する場合、あなただけ確認したい場合はあなたは(も示唆し@Sayseとして).exists()方法を使用する必要があります。

戻りTrueをクエリセットは、すべての結果が含まれている場合、およびFalse ない場合。

+1

私もあなたの答えをテストしますDoesNotExistと.filter()についてのあなたのコースに感謝します: –

関連する問題