2016-11-21 6 views
1

Ich versuche während der Registrierung einen ValidationError auszulösen, wenn bereits eine Verwendung mit derselben E-Mail existiert. Ich habe die folgende Methode in meiner Form hinzugefügt, um das zu tun.Warum erhöht dieses Django-Formular ValidationError nicht?

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 

Ich habe jedoch eine print-Anweisung nach except enthalten und die Konsole druckt immer diesen Wert. Aus irgendeinem Grund wird dieser Teil des Codes ausgeführt, auch wenn der Benutzer mit der angegebenen E-Mail-Adresse existiert.

Was mache ich falsch?

+0

'zurück email' mit Fehlerinhalt ... – dsgdfg

+0

Ich habe nicht verstanden. Es tut uns leid. – MiniGunnR

+0

@MiniGunnR Haben Sie das Benutzermodell wie vorgeschlagen importiert? –

Antwort

5

Das Problem ist im Gegenzug fuction, an der Stelle des Versuchs, mit der Ausnahme nur Gebrauch existiert() Methode zur Code Vereinfachung:

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 

Und stellen Sie sicher, dass HTML-Code auch so in Ihrer Formularvorlage aktualisiert :

{% 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 hat meine Antwort aktualisiert. –

+0

Ich bekomme "str" ​​-Objekt hat kein Attribut "objects". Diese Zeile ist markiert, wenn user.objects.filter (email = email) .exists(): '. – MiniGunnR

+0

@MiniGunnR Haben Sie das Benutzermodell in Ihre forms.py-Datei importiert? Wenn nicht, dann importieren Sie das Benutzermodell. –

Verwandte Themen