我在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的表单是无限的。因此,他们不包含用户的数据。我可以用它来获取数据吗?我真的想使用上下文传递数据,就像我上面做的那样。
答案 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
,与键相同。