/ / Perché questo modulo di Django non genera ValidationError? - python, django, forme

Perché questo modulo di Django non genera ValidationError? - python, django, forme

Sto cercando di generare un errore ValidationError durante la registrazione se esiste già un uso con la stessa email.Ho aggiunto il seguente metodo nel mio modulo per farlo.

    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

Tuttavia, ho incluso una dichiarazione di stampa dopo except e la console stampa sempre quel valore. Quindi, per qualche motivo, è possibile eseguire quella parte del codice anche se esiste l'utente con l'indirizzo email specificato.

Che cosa sto facendo di sbagliato?

risposte:

5 per risposta № 1

Il problema è in controtendenza, nel luogo di prova, eccetto il metodo use exists () per la semplificazione del codice:

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

E assicurati che anche il codice html sia aggiornato come questo nel modello di modulo:

   {% 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 %}