2016-11-21 22 views
1

同じ電子メールでの使用が既に存在する場合、登録時にValidationErrorを発生させようとしています。私はそれを行うために私のフォームに次のメソッドを追加しました。このDjangoフォームがValidationErrorを呼び出さないのはなぜですか?

def clean_email(self): 
     email = self.cleaned_data.get('email') 

     if email: 
      try: 
       user = User.objects.get(email=email) 
      except: 
       user = None 
     if user is not None: 
      raise forms.ValidationError('This email address is unavailable!') 

     return email 

しかし、私はexcept後にprint文が含まれていると、コンソールは常にその値を出力します。したがって、特定の電子メールアドレスを持つユーザーが存在する場合でも、コードの一部を実行するのは何らかの理由によるものです。

私は間違っていますか?

+0

エラー内容... – dsgdfg

+0

私は分かりませんでした。ごめんなさい。 – MiniGunnR

+0

@MiniGunnR私が提案したようにユーザーモデルをインポートしましたか? –

答えて

5

だけ(存在する使用以外の問題は、試してみるの代わりに、リターンのfuctionである)コードの簡素化のための方法:

from django.contrib.auth.models import User 

def clean_email(self): 
    email = self.cleaned_data.get('email') 

    if email: 
     if User.objects.filter(email=email).exists(): 
      raise forms.ValidationError('This email address is unavailable!') 
     else: 
      pass 

    return email 

とHTMLコードは、あなたのフォームテンプレートで、次のように更新されていることを確認します:

{% if form.errors %} 
     {% for field in form %} 
      {% for error in field.errors %} 
       <div class="row"> 
        {{ error|escape }} 
       </div> 
      {% endfor %} 
     {% endfor %} 
     {% for error in form.non_field_errors %} 
      <div class="row"> 
       {{ error|escape }} 
      </div> 
     {% endfor %} 
    {% endif %} 
+0

@AKSが私の答えを更新しました。 –

+0

'' str 'オブジェクトには属性' objects''がありません。この行は 'User.objects.filter(email = email).exists():'で強調表示されます。 – MiniGunnR

+0

@MiniGunnRユーザーモデルをforms.pyファイルにインポートしましたか?そうでなければ、ユーザーモデルをインポートします。 –

関連する問題