2012-03-08 29 views
0

对于调查问卷,我想向用户呈现一系列表单。我想保持通用视图,以便它可以在序列中呈现任何表单实例。如何按顺序呈现一系列Django表单?

目前,我存储了表单对象(不是实例)的列表,并且我需要展示每个表单的实例。 (例如formobject = formslist[3]; form = formobject();)。

有没有更pythonic这样做?我已经考虑在每个表单的定义中使用getnext函数,但我仍然需要一个地方列出我想要生成的表单序列。

下一步将介绍一些跳过逻辑,所以硬连线表单序列并不理想。

也许这会有所帮助。这是我在我看来,使用getnext函数。它从第一种形式的作品到第二,但当时并没有服务于第三种形式:

def showform(request): 
    if 'formobj' not in locals(): 
     formobj = StartForm 

    if request.method == 'POST': # If the form has been submitted... 
     form = formobj(request.POST) 

     if form.is_valid(): 
      try: 
       form.save() 
      except: 
       pass 
      cd = form.cleaned_data 
      formobj = form.get_next() 
      form = formobj() 
      if formobj == 'done': 
       render_to_response('doneform.html', context_instance=RequestContext(request)) 
      else: 
       form = formobj() 
    else: 
     form = formobj() 

    return render_to_response('template.html', {'form': form, 'requestpath': request.get_full_path()}, context_instance=RequestContext(request)) 
+0

你是否看了[窗体向导]可能会有所帮助(https://docs.djangoproject.com/en/dev/ref/的contrib/formtools /形式的向导/)? – jterrace 2012-03-08 20:06:10

+0

是的。我发现表单向导有限;它没有(据我所知)保存来自服务器上每一步的输入数据。如果用户想要停止填写表单并稍后再回来,则这是长表单的风险。 – Ari 2012-03-08 20:30:28

+0

@Ari:你用过django-merlin吗?你有一些工作代码可以分享吗? – 2014-05-22 05:41:25

回答

3

你有没有看这个表单向导期间保存数据的步骤

Using FormWizard and saving the forms data in between before the completion of the whole process?

中也提到该帖子是一个名为django-merlin的应用程序,它可以满足您的需求。虽然我没有亲自使用它。

编辑

这里是另一篇文章给你 Django - form wizard step by step

+0

我已经看了这两个,但没有完全得到我想要的地方(或者我不太明白如何去做)。第一个答案确实将数据保存为序列化格式,但似乎检索和反序列化不是微不足道的。目前还不清楚这将允许用户在表单中向后移动。 Django-merlin很有趣,但似乎将数据保存到Session中,而不是在服务器端。我可能对此有错,但从Merlin的文档中无法分辨出来。 – Ari 2012-03-08 21:32:53

+0

我现在可以看到会话数据*存储在服务器端。所以值得再看一次 - 梅林可能是我需要的。 – Ari 2012-03-09 07:00:41