我一直在尝试将SessionWizardView用于多步骤表单以进行长注册过程。我正在使用2个ModelForms并在初始化时使用实例。
这是源代码: https://djangosnippets.org/snippets/1078/
文档告诉我do_something_with_the_form_data(form_list),但也无法在此处保存数据。
class ContactWizard(SessionWizardView):
def done(self, form_list, **kwargs):
do_something_with_the_form_data(form_list)
return HttpResponseRedirect('/page-to-redirect-to-when-done/')
问:如何使用Django 1.7中的SessionWizardView将数据保存到数据库?
答案 0 :(得分:0)
done
方法的form_list参数是作为向导一部分的表单对象列表(存储在向导实例的self.form_list属性中)。
如果你有一个使用两个模型形式的向导,form_list将有两个模型实例。
您可能想要做的是在这些模型上调用“save”方法。
form_list属性是OrderedDict。我不确定是否总是如此,但使用NamedUrlWizard,表单也在元组内(url_name,form_object)。
因此,为了在每个表单上调用save()
方法,您可以执行以下操作:
def done(self, form_list, **kwargs):
for form in self.form_list.items():
form[-1].save()
return HttpResponseRedirect('/page-to-redirect-to-when-done/')
顺便说一句,您链接到的代码段确实被添加到contrib.formtools中的django,后者带有cookie或会话存储。但是django 1.8这个软件包已被拆分为django-formtools。