Django forms.ValidationError错误?
这是我在django的第三天,我正在做我的验证表单,我遇到了一个奇怪的错误,我的验证表单没有做任何事情,所以下面是代码Django forms.ValidationError错误?,django,django-forms,Django,Django Forms,这是我在django的第三天,我正在做我的验证表单,我遇到了一个奇怪的错误,我的验证表单没有做任何事情,所以下面是代码 class RegisterForm(forms.ModelForm): email = forms.EmailField(label="E-Mail", error_messages={'required': 'Please enter your name'}) class Meta: model = LowUser fields =[
class RegisterForm(forms.ModelForm):
email = forms.EmailField(label="E-Mail", error_messages={'required': 'Please enter your name'})
class Meta:
model = LowUser
fields =['fullname', 'email', 'password', 'bio']
widgets = {
'password' : forms.PasswordInput()
}
def clean_fullname(self):
data = self.cleaned_data.get("fullname")
if 'ab' in data:
raise forms.ValidationError('invalid')
else:
return data
如果我在全名中输入“ac”,它工作得非常好,它会将输入添加到数据库中。但是,如果我输入“ab”,它不会做任何事情,它不会给我任何错误,也不会将输入添加到我的数据库中。我很确定我的表单.ValidationError
有问题,因为如果我将提升表单.ValidationError('invalid')
更改为提升名称错误('Test')
,如下所示
def clean_fullname(self):
data = self.cleaned_data.get("fullname")
if 'ab' in data:
raise NameError('Test')
else:
return data
我输入“ab”。它工作得非常好,它给了我这一页
我正在使用django 2.1.5,如果您想知道,我将非常感谢您的帮助
先谢谢你
如果我在全名中输入“ac”
,它工作得非常好,它会将输入添加到数据库中。但是,如果我输入“ab”,它不会做任何事情,它不会给我任何错误,也不会将输入添加到我的数据库中
也就是说,预期行为,验证错误
用于收集所有错误
这样做的目的是您提出ValidationError
s。这些都是收集到的,当出现一个这样的错误时,form.is\u valid()
将返回False
,而form.errors
将包含一个包含所有错误的类似字典的对象。这样做的原因是在一次传递中收集所有字段的问题,这样它就不会只报告表单数据的第一个错误
假设您有五个字段有错误,表单只报告第一个字段的问题。然后需要五轮才能验证所有字段。通过收集所有错误,它可以显示多个错误。您甚至可以在同一字段上返回多个错误
有关更多信息,请参阅。多亏了威廉,我才意识到问题出在我的视图中。py
def registerForm(request):
regisform = RegisterForm()
cntxt = {'mainregisform': regisform, 'tst': ''}
if request.method == 'POST':
regisform = RegisterForm(request.POST)
if regisform.is_valid():
regisform.save()
return render(request, 'userregister.html', cntxt)
我以为
ValidationError
没有给我任何错误,因为通常在我的输入框顶部会有一条错误消息,但它确实给了我一个错误。问题是我在重新呈现regisform
之前定义了main regisform
,因此我从未收到错误消息,它不会引发任何错误。它将指定form.is\u valid()
为False
,错误将出现在form.errors
中,在您看来。我已经解决了它。谢谢您这么多人。如果你不介意的话,还有一个小问题。如果此表单.is\u valid()
返回false,它会重新呈现我的表单,在我的输入上添加一条小错误消息吗?如果是的话,那么我已经有了一个清晰的想法。@iHopemyenglishGood:通常是的。如果将该表单
(因此不要创建新表单)再次传递给模板,并在模板中呈现表单,则会显示错误。如果要手动渲染表单,还可以渲染错误。看见