1

我在一个视图中显示表单错误时遇到了一些问题。我目前是一名学生,已经学习了 2 个学期的 Python 课程。我决定自学一些 Django。

我遇到的问题是我试图有一个多步骤的过程,以便用户可以发布一本书。但是,我想在同一个 url 内完成。因此,当用户完成第一个表单并单击提交时,它将继续到下一个表单,但 url 不会改变。我已经想通了。我的问题是,当我进入第二个表格时,已经显示了与表格一起出现的表格错误。我昨天花了 3 个小时试图弄清楚但没有运气。因此,如果有人可以伸出援助之手,那就太好了!谢谢!

def book_post(request):
    if request.method == 'POST':
        formone = bookFormOne(request.POST)        
        formtwo = bookFormTwo(request.POST, request.FILES)
        if formtwo.is_valid():   
            #.....do form2 valid stuff
            return HttpResponseRedirect('/success')        
        if formone.is_valid() :
            #....do form1 valid stuff
            #formtwo = bookFormTwo()..if i add this the errors wont display but then    errors from the first form spill over and it wont allow the second form to be valid...###

            args = {'form2':formtwo,'isbn':isbn,'subject':subject}
            args.update(csrf(request)) 
            return render_to_response('book_post_form2.html', args,context_instance=RequestContext(request))        

        else:
            args = {}
            args['form'] = formone
            args['form2'] = formtwo
            args.update(csrf(request))            


    else: 
        form = bookFormOne()
        args = {'form':form}
        args.update(csrf(request)) 
    return render_to_response('book_post.html', args,context_instance=RequestContext(request)) 
4

1 回答 1

1

在任何情况下,您都不会显示一个空的 formtwo。将 request.POST 传递给表单并调用 is_valid() 将导致验证运行,这可能不是您在用户发布表单时想要的。正如@karthikr 建议的那样,您需要找出一种方法来判断您的步骤,以便您可以验证并显示适当的表格。

最简单的方法可能是在渲染 book_post.html 时添加 args['step'] = 1 和在渲染 book_post_form2.html 时添加 args['step'] = 2 之类的内容。然后使用隐藏的表单字段在 POST 上再次将该变量传递回服务器,并检查它以确定您需要验证哪个表单。

于 2013-06-11T18:07:59.303 回答