Multi-Step Form Wizard
A snippet showing how to create multi-step forms in Django.
# Install django-formtools
pip install django-formtools
# settings.py
INSTALLED_APPS += ["formtools"]
# forms.py
from django import forms
class StepOne(forms.Form):
name = forms.CharField()
email = forms.EmailField()
class StepTwo(forms.Form):
address = forms.CharField()
city = forms.CharField()
# views.py
from formtools.wizard.views import SessionWizardView
from .forms import StepOne, StepTwo
from django.http import HttpResponse
class SignupWizard(SessionWizardView):
form_list = [StepOne, StepTwo]
template_name = "wizard.html"
def done(self, form_list, **kwargs):
data = {}
for form in form_list:
data.update(form.cleaned_data)
# process data...
print(data)
return HttpResponse("Done!")
<!-- templates/wizard.html -->
<form method="post" class="bg-white border rounded p-3">
{% csrf_token %}
{{ wizard.management_form }}
{{ wizard.form.as_p }}
<div class="d-flex justify-content-between">
{% if wizard.steps.prev %}
<button name="wizard_goto_step" value="{{ wizard.steps.prev }}" class="btn btn-outline-secondary">Back</button>
{% endif %}
<button type="submit" class="btn btn-primary">Next</button>
</div>
</form>
Explanation:
-
Use
formtools.wizardwithSessionWizardViewfor simple multi-step flows. -
Use
wizard.management_formto handle form state and validation. -
Implement
done()to process final form data after all steps.
- Category Forms & Validation
- Total Views 711
- Last Modified 04 November, 2025
- Tags #forms #wizard #multi-step #validation
Previous snippet
ReCAPTCHA Validation in Forms
Next snippet