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.wizard with SessionWizardView for simple multi-step flows.
  • Use wizard.management_form to 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
Never miss a story on Django.wiki

Subscribe for fresh tutorials, snippets, and updates.

By subscribing you agree to our Privacy Policy.