Min*_*nnR 1 python forms 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
Run Code Online (Sandbox Code Playgroud)
但是,我之后包含了一个print语句except,控制台总是打印该值.因此,即使具有指定电子邮件地址的用户存在,也由于某种原因执行该部分代码.
我究竟做错了什么?
问题在于返回功能,代替try,除了使用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
Run Code Online (Sandbox Code Playgroud)
并确保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 %}
Run Code Online (Sandbox Code Playgroud)