表单验证在django中必填字段保持空白时出错

时间:2017-01-01 11:19:10

标签: django forms validation view

如果没有填写,我希望将错误作为字段上方的标签。 这是我的views.py:

 @login_required(login_url='user_profile:login')
    def NewWriting(request):
        if request.method=="POST":
            form=WritingForm(request.POST)
            if form.is_valid():
                post=form.save(commit=False)
                post.author=request.user
                post.save()
                return redirect('user_profile:index')

        else:
            form = WritingForm()
            subject = Subject.objects.all()
            return render(request,'user_profile/writing_form.html', {'form':form , 'subject':subject})

我应该在代码中添加什么内容? 感谢

2 个答案:

答案 0 :(得分:0)

如果表单无效,则需要添加另一个全部呈现,并且在模板中,您需要使用form.errors。这样的东西应该工作,然后将表单验证错误传递回UI /模板以显示给用户:

@login_required(login_url='user_profile:login')
def NewWriting(request):
    form = None
    if request.method=="POST":
        form=WritingForm(request.POST)
        if form.is_valid():
            post=form.save(commit=False)
            post.author=request.user
            post.save()
            return redirect('user_profile:index')

    if form is None:
        form = WritingForm()
    subject = Subject.objects.all()
    return render(request,'user_profile/writing_form.html', {'form':form , 'subject':subject})

答案 1 :(得分:0)

没有看到你的表单类......

选项1:

  • 如果您确实希望用户能够使用空数据提交表单,然后使用表单专门向他们显示错误,请为{{1}中的特定字段设置required=False kwarg } .class。然后覆盖WritingFormlink)方法,然后您可以执行以下操作:

    clean_<fieldname>

def clean_<fieldname>: if self.cleaned_data['<fieldname>'].strip() == '': raise ValidationError('This field cannot be blank!') return self.cleaned_data['<fieldname>'] 替换为该字段名称。

选项2:

  • default for any form是要求所有字段(IE:<fieldname> kwarg在字段上)。所以一般情况下,如果需要该字段,大多数浏览器至少会将光标移动到空字段,并且在字段中没有数据的情况下不允许提交表单。

如果required=True返回False,您还需要返回绑定表单,或者您不会看到错误(如果表单无效,您现在不会返回任何内容) 。有关使用表单的常见功能视图模式,请参阅django docs here