FormWizardの各stepに名前をつける

昨日ちょっと書きましたが、FormWizardは単純にformのリストを渡すと、各stepを識別する名前がu'0'、とかu'1'とかになります。

class OrderWizard(SessionWizardView):
    form_list = [AuthenticationForm, AddressForm, PaymentForm]

    def done(self, form_list, **kwargs):
        # 入力値を使って、登録処理などを行い、
        # 実際はリダイレクトさせる
        return render_to_response('apps/done.html', {
            'form_data': [form.cleaned_data for form in form_list],
        })


各stepにわかりやすい名前をつける方法は、WizardViewのget_initkwargsメソッドのコメントに書いてあります。

* `form_list` - is a list of forms. The list entries can be single form
classes or tuples of (`step_name`, `form_class`). If you pass a list
of forms, the wizardview will convert the class list to
(`zero_based_counter`, `form_class`). This is needed to access the
form for a specific step.


フォームのリストの代わりに、('step_name', form)のリストを渡すんですね

こんな感じです

# views.py
ORDER_FORMS = [("login", AuthenticationForm),
                             ("address", AddressForm),
                            ("payment", PaymentForm)]


class OrderWizard(SessionWizardView):
    form_list = ORDER_FORMS

    def done(self, form_list, **kwargs):
        # 入力値を使って、登録処理などを行い、
        # 実際はリダイレクトさせる
        return render_to_response('apps/done.html', {
            'form_data': [form.cleaned_data for form in form_list],
        })

# urls.py
url(r'^order/$', OrderWizard.as_view(ORDER_FORMS)),