Django FormWizards:如何在表单之间轻松传递用户输入的数据?

时间:2013-02-13 18:23:57

标签: django django-forms django-templates

我在Django 1.4.3中使用FormWizard功能。

我已经成功创建了一个4步表单。在表单的前3个步骤中,它正确地从用户获取信息,验证它等。在步骤#4中,它现在只显示"确认"按钮。没有其他的。当你点击"确认"在步骤#4中,在done()函数中做了一些有用的事情。到目前为止一切正常。

但是,我想这样做,以便在步骤4(确认步骤)中,它向用户显示他们在前面的步骤中输入的数据供他们查看。我试图找出实现这一目标的最无痛的方法。到目前为止,我在上下文中创建了一个名为formList的条目,其中包含已经完成的表单列表。

class my4StepWizard(SessionWizardView):

    def get_template_names(self):
        return [myWizardTemplates[self.steps.current]]

    def get_context_data(self, form, **kwargs):
        context = super(my4StepWizard, self).get_context_data(form=form, **kwargs)
        formList = [self.get_form_list()[i[0]] for i in myWizardForms[:self.steps.step0]]

        context.update(
            {
                'formList': formList,
            }
        )
        return context        


    def done(self, form_list, **kwargs):
        # Do something here.
        return HttpResponseRedirect('/doneWizard')

表单#1有一个名为myField的输入字段。 所以在我的第4步模板中,我想做{{formList.1.clean_myField}}。但是,当我这样做时,我收到以下错误:

例外值:
' my4StepWizard'对象没有属性' cleaning_data'

似乎我放入formList的表单是无限的。因此,他们不包含用户的数据。我可以用它来获取数据吗?我真的想使用上下文传递数据,就像我上面做的那样。

1 个答案:

答案 0 :(得分:2)

试试这个:

def get_context_data(self, form, **kwargs):
    previous_data = {}
    current_step = self.steps.current # 0 for first form, 1 for the second form..

    if current_step == '3': # assuming no step is skipped, this will be the last form
        for count in range(3):
            previous_data[unicode(count)] = self.get_cleaned_data_for_step(unicode(count))

    context = super(my4StepWizard, self).get_context_data(form=form, **kwargs)
    context.update({'previous_cleaned_data':previous_data})
    return context

previous_data是一个字典,它的键是向导的步骤(0索引)。每个键的项目是步骤中表单的cleaned_data,与键相同。