title: Save form data on every step using Django FormWizard
body: <p><strong>Background</strong></p>
  
  <p>I'm building a very large form to process customer submissions, so the end goal is to allow the user to resume the form where they left off at a later date.  The form is fully functional using a FormWizard (<code>NamedUrlSessionWizardView</code>, actually).  The Django docs mention a final save is accomplished in the <code>done</code> method, and leave this as an <a href="https://docs.djangoproject.com/en/1.6/ref/contrib/formtools/form-wizard/#django.contrib.formtools.wizard.views.WizardView.done" rel="nofollow noreferrer">exercise to the reader</a>.  This works OK if the user completes this in one sitting, but not if you want to restore this later.</p>
  
  <p>In my case, an email address is used to lookup past progress, and send a unique link to the user.  This sets up the form and returns the user to where they left off.  This works fine as long as your session is still valid, but not if it isn't (different computer, etc).  What I would like to do is save the form data (these are <code>ModelForm</code>s) after each step.  I'll restore the user's state when they return.</p>
  
  <p><strong>Research</strong></p>
  
  <p><a href="https://stackoverflow.com/a/19775655/2057885">This answer</a> is about the only solution I can find, but the solution is the same thing that the standard <code>FormWizard.post()</code> <a href="https://github.com/django/django/blob/stable/1.6.x/django/contrib/formtools/wizard/views.py#L291-L292" rel="nofollow noreferrer">method does</a>:</p>
  
  <pre><code>if form.is_valid():
      # if the form is valid, store the cleaned data and files.
      self.storage.set_step_data(self.steps.current, self.process_step(form))
      self.storage.set_step_files(self.steps.current, self.process_step_files(form))
  </code></pre>
  
  <p><strong>My Question</strong></p>
  
  <p>What is the proper way/place in a <code>FormWizard</code> to take action on, and save the form data out after each step?</p>