1

以前の質問からの再投稿:

Django FormWizards:フォーム間でユーザーが入力したデータを簡単に渡す方法は?

Django 1.4.3 で FormWizard 機能を使用しています。

4 ステップのフォームが正常に作成されました。フォームの最初の 3 つのステップでは、ユーザーから情報を正しく取得し、それを検証します。ステップ 4 では、「確認」ボタンが表示されるだけです。他には何もありません。ステップ 4 で「確認」を押すと、done() 関数で何か便利なことを行います。これまでのところ、すべて正常に動作しています。

ただし、ステップ 4 (確認ステップ) で、前のステップで入力したデータを確認のためにユーザーに表示するようにしたいと思います。これを実現するための最も痛みのない方法を見つけようとしています。これまでのところ、既に完了したフォームのリストを含む formList というコンテキストでエントリを作成しています。

クラス 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

1

3つのフォームの間に重複するフィールド名がない場合は、WizardView.get_all_cleaned_data()を使用できます。それはあなたがしようとしているようにget_context_data()を介してテンプレートに渡すことができるすべてのデータのdictを返します。それが私が現在取っている角度ですが、私はもっと良い方法を見つけたいと思っていました。

于 2013-02-18T20:49:32.893 に答える