FormWizardを試してみた

まずはFormWizard: multiple-step forms in Djangoの通り試してみた。
画面遷移は

  • ユーザ名とメールアドレスを入力してsubmit
  • 項目を選択して、テキストエリアに入力してsubmit
  • 最後にthanksページを表示

です。


アプリディレクトリの直下にforms.pyを作成して以下のコードを記述

from django import newforms as forms
from django.http import HttpResponseRedirect
from django.contrib.formtools.wizard import FormWizard

class ContactOne(forms.Form):
    name = forms.CharField()
    email = forms.EmailField()

class ContactTwo(forms.Form):
    CHOICES = [(x, x) for x in ("I like your site", "I hate your site", "I don't care")]

    feeling = forms.ChoiceField(choices = CHOICES)
    message = forms.CharField(widget = forms.widgets.Textarea)

class ContactWizard(FormWizard):
    def done(self, request, form_list):
        return HttpResponseRedirect('/contact/thanks/')

次に、以下をurls.pyに追加

from projectname.appname.forms import ContactOne, ContactTwo, ContactWizard

urlpatterns = patterns('',
	 (r'^contact/$', ContactWizard([ContactOne, ContactTwo])),
	 (r'^contact/thanks/$', 'django.views.generic.simple.direct_to_template', {'template': 'thanks.html'}),
)

次にtemplateを作成

{% extends 'base.html' %}

{% block content %}

<form action='.' method='POST'>
<table>
    {% ifequal step 2 %}
        <p>You're almost done!</p>
    {% endifequal %}
    <input type="hidden" name="{{ step_field }}" value="{{ step0 }}" />
    {{ previous_fields|safe }}
    {{ form }}
</table>
<p><input type="submit" value="Submit" /></p>
</form>

{% endblock %}

次にthanksページを作成して、設置。
この時に、urls.pyを見ると

(r'^contact/thanks/$', 'django.views.generic.simple.direct_to_template', {'template': 'thanks.html'}),

と、'django.views.generic.simple.direct_to_template'を使っているので、
settings.pyのTEMPLATE_DIRSで指定した場所の直下にthanks.htmlを設置してください。
たったこれだけで、Wizardを作ることが出来ます:)