gpt4 book ai didi

python - 为什么这个 Django 表单没有引发 ValidationError?

转载 作者:太空宇宙 更新时间:2023-11-04 08:45:48 24 4
gpt4 key购买 nike

如果已经存在对同一电子邮件的使用,我会尝试在注册期间引发 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

但是,我在 except 之后包含了一个打印语句,并且控制台始终打印该值。因此,即使具有指定电子邮件地址的用户存在,也会出于某种原因执行该部分代码。

我做错了什么?

最佳答案

问题出在 return 函数,而不是 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

并确保表单模板中的 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 %}

关于python - 为什么这个 Django 表单没有引发 ValidationError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40715316/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com