From a9b2ac25d1760e1b8e01632544b7f503ccab8577 Mon Sep 17 00:00:00 2001
From: Justin Bronn <jbronn@gmail.com>
Date: Mon, 22 Feb 2010 05:00:36 +0000
Subject: [PATCH] Fixed #9147 -- Added `FormPreview.process_preview`
 customization hook.  Thanks, bthomas and thalin.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@12486 bcc190cf-cafb-0310-a4f2-bffc1f526a37
---
 django/contrib/formtools/preview.py         |  8 ++++++++
 docs/ref/contrib/formtools/form-preview.txt | 13 +++++++++++++
 docs/ref/contrib/formtools/form-wizard.txt  |  4 ++--
 3 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/django/contrib/formtools/preview.py b/django/contrib/formtools/preview.py
index 856343a0df..f3d86ee037 100644
--- a/django/contrib/formtools/preview.py
+++ b/django/contrib/formtools/preview.py
@@ -60,6 +60,7 @@ class FormPreview(object):
         f = self.form(request.POST, auto_id=AUTO_ID)
         context = {'form': f, 'stage_field': self.unused_name('stage'), 'state': self.state}
         if f.is_valid():
+            self.process_preview(request, f, context) 
             context['hash_field'] = self.unused_name('hash')
             context['hash_value'] = self.security_hash(request, f)
             return render_to_response(self.preview_template, context, context_instance=RequestContext(request))
@@ -96,6 +97,13 @@ class FormPreview(object):
         """
         pass
 
+    def process_preview(self, request, form, context):
+        """
+ 	Given a validated form, performs any extra processing before displaying
+ 	the preview page, and saves any extra data in context.
+ 	"""
+ 	pass
+
     def security_hash(self, request, form):
         """
         Calculates the security hash for the given HttpRequest and Form instances.
diff --git a/docs/ref/contrib/formtools/form-preview.txt b/docs/ref/contrib/formtools/form-preview.txt
index f786b74305..ece69067ee 100644
--- a/docs/ref/contrib/formtools/form-preview.txt
+++ b/docs/ref/contrib/formtools/form-preview.txt
@@ -108,3 +108,16 @@ These values can be overridden for a particular form preview by setting
 :attr:`~django.contrib.formtools.FormPreview.form_template` attributes on the
 FormPreview subclass. See :file:`django/contrib/formtools/templates` for the
 default templates.
+
+Advanced ``FormPreview`` methods
+================================
+
+.. versionadded:: 1.2
+
+.. method:: FormPreview.process_preview
+
+    Given a validated form, performs any extra processing before displaying the
+    preview page, and saves any extra data in context.
+
+    By default, this method is empty.  It is called after the form is validated,
+    but before the context is modified with hash information and rendered.
diff --git a/docs/ref/contrib/formtools/form-wizard.txt b/docs/ref/contrib/formtools/form-wizard.txt
index 0449bb9cd0..5ef862ce3d 100644
--- a/docs/ref/contrib/formtools/form-wizard.txt
+++ b/docs/ref/contrib/formtools/form-wizard.txt
@@ -199,8 +199,8 @@ wizard takes a list of your :class:`~django.forms.Form` objects as arguments::
         (r'^contact/$', ContactWizard([ContactForm1, ContactForm2])),
     )
 
-Advanced FormWizard methods
-===========================
+Advanced ``FormWizard`` methods
+===============================
 
 .. class:: FormWizard