我在一个 View 中显示表单错误时遇到了一些问题。我目前是一名学生,已经学习了两个学期的 Python 类(class)。我决定自学一些 Django。
我遇到的问题是,我试图采用多步骤流程,以便用户可以发布一本书。但是,我想在同一个网址内执行此操作。因此,当用户完成第一个表单并单击“提交”时,它将继续到下一个表单,但 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))
最佳答案
您没有任何显示空 formtwo 的情况。将 request.POST 传递到表单并调用 is_valid() 将导致验证运行,这可能不是您在用户 POSTS formone 时想要的。正如 @karthikr 所建议的,您需要找到一种方法来告诉您处于哪个步骤,以便您可以验证并显示适当的表单。
最简单的方法可能是在渲染 book_post.html 时添加 args['step'] = 1 ,在渲染 book_post_form2.html 时添加 args['step'] = 2 。然后使用隐藏表单字段在 POST 上再次将该变量传递回服务器,并检查它以确定您需要验证哪个表单。
关于python - Django多表单1 View ..表单错误问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17050302/