【问题标题】:Django formwizard: passing data between formsDjango formwizard:在表单之间传递数据
【发布时间】:2012-06-18 00:23:56
【问题描述】:

我有一个包含 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)

除了这个解决方案,还有更优雅的方式在表单向导的表单之间传递数据吗?

【问题讨论】:

    标签: python django


    【解决方案1】:

    我会做以下事情:

    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
    

    【讨论】:

    • 非常感谢,花了一整天的时间试图让它工作。
    【解决方案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
    

    【讨论】:

      【解决方案3】:

      您可以通过将“初始”信息传递给第三种形式的会话来做到这一点。 这是something similar 的示例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-29
        • 2015-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多