summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Plant <L.Plant.98@cantab.net>2010-11-16 14:37:00 +0000
committerLuke Plant <L.Plant.98@cantab.net>2010-11-16 14:37:00 +0000
commitb84838aef4de49c9567c98bd8a8d492e177e5e4f (patch)
treeb07242b553108861e1e4e7373cef41f673a15f33
parentb9e6db4ae801190cb2db188b8d5a5f0e891a6d56 (diff)
Fixed #14576 - FormWizard.done() method doesn't get passed the last form in the list
Thanks to cyberdelia for report and test, and steph for the initial patch. git-svn-id: http://code.djangoproject.com/svn/django/trunk@14574 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/contrib/formtools/tests/__init__.py24
-rw-r--r--django/contrib/formtools/wizard.py6
2 files changed, 27 insertions, 3 deletions
diff --git a/django/contrib/formtools/tests/__init__.py b/django/contrib/formtools/tests/__init__.py
index 9c7d46f98a..4c71c50321 100644
--- a/django/contrib/formtools/tests/__init__.py
+++ b/django/contrib/formtools/tests/__init__.py
@@ -360,3 +360,27 @@ class WizardTests(TestCase):
"wizard_step": "1"}
wizard(DummyRequest(POST=data))
+ def test_14576(self):
+ """
+ Regression test for ticket #14576.
+
+ The form of the last step is not passed to the done method.
+ """
+ reached = [False]
+ that = self
+
+ class Wizard(WizardClass):
+ def done(self, request, form_list):
+ reached[0] = True
+ that.assertTrue(len(form_list) == 2)
+
+ wizard = Wizard([WizardPageOneForm,
+ WizardPageTwoForm])
+
+ data = {"0-field": "test",
+ "1-field": "test2",
+ "hash_0": "2fdbefd4c0cad51509478fbacddf8b13",
+ "wizard_step": "1"}
+ wizard(DummyRequest(POST=data))
+ self.assertTrue(reached[0])
+
diff --git a/django/contrib/formtools/wizard.py b/django/contrib/formtools/wizard.py
index d382e297c5..e0f5e2c64a 100644
--- a/django/contrib/formtools/wizard.py
+++ b/django/contrib/formtools/wizard.py
@@ -116,9 +116,9 @@ class FormWizard(object):
# Since the hashes only take into account values, and not other
# other validation the form might do, we must re-do validation
# now for security reasons.
- current_form_list = [self.get_form(i, request.POST) for i in range(current_step)]
+ previous_form_list = [self.get_form(i, request.POST) for i in range(current_step)]
- for i, f in enumerate(current_form_list):
+ for i, f in enumerate(previous_form_list):
if not self._check_security_hash(request.POST.get("hash_%d" % i, ''), request, f):
return self.render_hash_failure(request, i)
@@ -132,7 +132,7 @@ class FormWizard(object):
next_step = current_step + 1
if next_step == self.num_steps():
- return self.done(request, current_form_list)
+ return self.done(request, previous_form_list + [form])
else:
form = self.get_form(next_step)
self.step = current_step = next_step