从之前的问题重新发布:
Django FormWizards: How to painlessly pass user-entered data between forms?
我在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 :(得分:1)
如果三个表单中没有任何重复的字段名称,则可以使用WizardView.get_all_cleaned_data()。它返回所有数据的字典,可以通过get_context_data()传递给模板,就像您尝试的那样。 That's the angle I'm currently taking,但我希望找到更好的方法。