【发布时间】: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 工作。对于我的应用程序,我最终基于 Adobe FormFiller 制作了一个静态表单。
-
@Ari:那是 Django 应用程序还是 django 之外的东西?谢谢