Django forms.ValidationError错误?

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 =[

这是我在django的第三天,我正在做我的验证表单,我遇到了一个奇怪的错误,我的验证表单没有做任何事情,所以下面是代码

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:通常是的。如果将该
表单
(因此不要创建新表单)再次传递给模板,并在模板中呈现表单,则会显示错误。如果要手动渲染表单,还可以渲染错误。看见