2016-11-21 35 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 

不過,我已經包含了一個print語句except後控制檯始終打印該值。因此,即使具有指定電子郵件地址的用戶存在,也是出於某種原因執行該部分代碼。

我在做什麼錯?

+0

'return email' with error contents ... – dsgdfg

+0

我不明白。抱歉。 – MiniGunnR

+0

@MiniGunnR你是否按照我的建議導入用戶模型.. ?? –

回答

5

的問題是回報機能的研究,在嘗試的地方,但只是使用exists()代碼的簡化方法:

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文件中?如果不是,則導入用戶模型。 –

相關問題