Skip to main content
 首页 » 编程设计

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

2025年05月04日40myhome

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