3

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' オブジェクトには属性 'cleaned_data' がありません

formList に入れているフォームは無制限のようです。したがって、ユーザーのデータは含まれません。データ自体を取得するために使用できる修正はありますか? 上記のように、コンテキストを使用してデータを渡したいと思います。

4

1 に答える 1

2

これを試して:

def get_context_data(self, form, **kwargs):
    previous_data = {}
    current_step = self.steps.current # 0 for first form, 1 for the second form..

    if current_step == '3': # assuming no step is skipped, this will be the last form
        for count in range(3):
            previous_data[unicode(count)] = self.get_cleaned_data_for_step(unicode(count))

    context = super(my4StepWizard, self).get_context_data(form=form, **kwargs)
    context.update({'previous_cleaned_data':previous_data})
    return context

previous_dataはディクショナリで、そのキーはウィザードのステップです (0 インデックス)。各キーの項目は、キーcleaned_dataと同じステップのフォームの項目です。

于 2013-02-13T21:51:53.793 に答える