【问题标题】:How to present a sequence of Django Forms in order?如何按顺序呈现一系列 Django 表单?
【发布时间】:2012-03-08 20:02:18
【问题描述】:

对于问卷调查,我想向用户展示一系列表格。我想保持视图通用,以便它可以呈现序列中的任何表单实例。

目前,我正在存储表单对象(不是实例)的列表,并在需要呈现时实例化每个表单。 (例如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))

【问题讨论】:

  • 你看过form wizard吗?
  • 是的。我发现表单向导有限;它不会(据我所知)保存服务器上每个步骤的输入数据。如果用户想停止填写表单并稍后再回来,这对于长表单来说是一种风险。
  • @Ari:你用过 django-merlin 吗?你有一些工作代码要分享吗?
  • @brainstorm,我不记得我是否让 django-merlin 工作。对于我的应用程序,我最终基于 Adob​​e FormFiller 制作了一个静态表单。
  • @Ari:那是 Django 应用程序还是 django 之外的东西?谢谢

标签: python django forms


【解决方案1】:

您是否在表单向导步骤中查看过此内容以保存数据

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

该帖子中还提到了一个名为 django-merlin 的应用程序,它可以满足您的需求。不过我个人没有用过。

编辑

这是另一个可能对您有帮助的帖子 Django - form wizard step by step

【讨论】:

  • 我已经看过这两个,但没有完全达到我想要的位置(或者我不太明白如何去做)。第一个答案确实以序列化格式保存数据,但似乎检索和反序列化并非易事。还不清楚这是否会允许用户在表单中向后移动。 Django-merlin 很有趣,但似乎将数据保存到 Session,而不是在服务器端。我可能对此有误,但无法从 Merlin 的文档中判断出来。
  • 我现在看到 Session 数据 存储在服务器端。所以值得再看看——梅林可能是我需要的。
猜你喜欢
  • 2010-09-25
  • 2016-05-06
  • 2011-05-27
  • 2013-08-05
  • 2013-12-04
  • 1970-01-01
  • 1970-01-01
  • 2015-07-13
  • 2018-08-31
相关资源
最近更新 更多