4

3 つのフォームを含むフォーム ウィザードがあります。基本的に、私がやろうとしているのは、1 番目と 2 番目のフォームから 3 番目のフォームにデータを渡すことです。process_step私が試したのは、ウィザード クラスにディクショナリ属性を追加し、メソッドが呼び出されるたびにそのディクショナリを更新することです。Django 1.4 のドキュメントには、送信されたすべてのステップでページがレンダリングされるたびに、このメソッドが呼び出されることが記載されています。

次のサンプル コードでは、辞書属性を整数に変更し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)

このソリューション以外に、フォーム ウィザードのフォーム間でデータを渡すより洗練された方法はありますか?

4

3 に答える 3

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
于 2012-06-29T17:09:31.160 に答える
2

私は formwizard の経験がほとんどありませんが、django docs から、これはあなたが求めているもののように見えます。

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
于 2012-06-15T09:10:41.320 に答える
1

「初期」情報を3番目のフォームに渡すセッションでそれを行うことができます。似たような例を次に示します。

于 2012-06-29T19:06:10.687 に答える