我正在设计一个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,表示我可以&# 39; t将NULL电子邮件添加到我的数据库。发生的事情是,尽管clean_email捕获了一个错误,但在我的clean()方法中创建用户的行(即u = User(email=email)
和u.save()
)仍在运行。
如何使它成为如果我的clean_email()方法捕获错误,clean()不运行,而我的表单显示clean_email()抛出的错误?