我正在设计一个Django表单,其中包含两个字段的自定义清理方法,以及表单本身 .

理想情况下,我喜欢我的表单停止处理并在我的字段未验证时抛出错误 . 但是,即使字段抛出ValidationErrors,我为表单编写的自定义clean()方法也会运行 .

这是一个例子:

forms.py

from django import forms
from .models import User

class BasicsForm(forms.Form):

    email = forms.EmailField(label='E-mail address', max_length=128)

    def clean_email(self):

            email = self.cleaned_data['email']

            if User.objects.filter(email=email).exists():
                raise forms.ValidationError("E-mail is already taken.")

            return email

    def clean(self):

            # Call the parent clean method
            cleaned_data = super().clean()

            email = cleaned_data.get('email')

            u = User(email=email)
            u.save()

如果我尝试使用无效的电子邮件地址提交上述表单(例如,已经在网站上注册的电子邮件,这将在clean_email中引发ValidationError),我会收到一条IntegrityError,表示我可以_972856发生的事情是即使clean_email捕获错误,在我的clean()方法中创建用户的行(即 u = User(email=email)u.save() )仍然运行 .

如何使它如果我的clean_email()方法捕获错误,clean()不运行,而我的表单显示clean_email()抛出的错误?