Django表单向导:如何将“确认”屏幕作为向导的最后一步?

时间:2013-02-14 17:29:08

标签: django

从之前的问题重新发布:

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

1 个答案:

答案 0 :(得分:1)

如果三个表单中没有任何重复的字段名称,则可以使用WizardView.get_all_cleaned_data()。它返回所有数据的字典,可以通过get_context_data()传递给模板,就像您尝试的那样。 That's the angle I'm currently taking,但我希望找到更好的方法。