 <p>what you can do is every step, save out the form state to some serialised object in db ForeignKeyed to the user.</p> <p>then when hooking up the formwizard, wrap the formwizard view in a custom view which checks if the user has a saved form and if so deserialises and redirects to the appropriate step.</p> <p>Edit: seems formwizard saves state in POST. only need to save postdata.</p> <p>models.py:</p> <pre><code>class SavedForm(Model): user = ForeignKey(User) postdata = TextField() </code></pre> <p>views.py:</p> <pre><code>import pickle class MyWizard(FormWizard): def done(self, request, form_list): SavedForm.objects.get(user=request.user).delete() # clear state!! return render_to_response('done.html',) formwizard = MyWizard([Form1, Form2]) &lt;- class name, not instance name def formwizard_proxy(request, step): if not request.POST: #if first visit, get stored data try: prev_data = SavedForm.objects.get(user=request.user) request.POST = pickle.loads(prev_data.postdata) except: pass else: # otherwise save statet: try: data = SavedForm.objects.get(user=request.user) except: data = SavedForm(user=request.user) data.postdata=pickle.dumps(request.POST) data.save() return formwizard(request) </code></pre> <p>edit: changed formwizard constructor</p>