【问题标题】:Django multiple forms 1 view..Form errors issueDjango 多表单 1 视图..表单错误问题
【发布时间】:2013-06-07 16:02:28
【问题描述】:

我在一个视图中显示表单错误时遇到了一些问题。我目前是一名学生,已经学习了 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)) 

【问题讨论】:

  • 这不是很干净的逻辑。将step_number 作为上下文变量,并基于此验证表单。这样,您就可以毫无问题地验证正确的步骤
  • @karthikr 我怎样才能完成这项工作?你介意解释一下吗?谢谢!
  • 我猜 Shane 跟我的建议差不多。
  • @karthikr 感谢您的帮助!让它工作!

标签: python django forms views


【解决方案1】:

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

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

【讨论】:

  • 感谢您的帮助!我现在可以很好地工作了!!再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-03
  • 1970-01-01
  • 2011-01-24
相关资源
最近更新 更多