Django:如何使用Django 1.7中的SessionWizardView将数据保存到数据库?

时间:2015-04-15 14:07:56

标签: python django django-forms django-formwizard

我一直在尝试将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将数据保存到数据库?

1 个答案:

答案 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