我有一个包含3个表单的表单向导。基本上,我要做的是将数据从第一种和第二种形式传递到第三种形式。我尝试的是向向导类添加一个字典属性,并在每次调用方法process_step
时更新该字典。 Django 1.4 documentation表示每次为所有提交的步骤呈现页面时都会调用此方法。
在以下示例代码中,使用整数self.test
更改字典属性以使其简单。在这种情况下,每次调用方法process_step
时,self.test
的值为2,永远不会增加。似乎为每个表单调用方法__init__
。
class MyWizard(SessionWizardView):
def __init__(self, *args, **kwargs):
super(MyWizard, self).__init__(*args, **kwargs)
self.test = 1
def process_step(self, form):
self.test += 1
print self.test
return self.get_form_step_data(form)
除了这个解决方案之外,是否有更优雅的方式在表单向导的表单之间传递数据?
答案 0 :(得分:8)
我将做的是以下内容:
class MyWizard(SessionWizardView):
def get_context_data(self, form, **kwargs):
context = super(MyWizard, self).get_context_data(form=form, **kwargs)
if self.steps.step1 == 3:
data_from_step_1 = self.get_cleaned_data_for_step('0') # zero indexed
data_from_step_2 = self.get_cleaned_data_for_step('1') # zero indexed
context.update({'data_from_step_1':data_from_step_1,
'data_from_step_2':data_from_step_2})
return context
答案 1 :(得分:2)
我对formwizard没什么经验,但是从django docs this看起来就像你追求的那样。
def get_context_data(self, form, **kwargs):
context = super(MyWizard, self).get_context_data(form=form, **kwargs)
if self.steps.current == 'my_step_name':
context.update({'another_var': True})
return context
答案 2 :(得分:1)
你可以通过" inital"信息到第3表格。 这是something similar的一个例子。