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 № 1Il 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 %}