Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

[1.2.X] Fixed #14576, #14946 - FormWizard.done() method doesn't get p…

…assed the last form in the list.

Thanks to cyberdelia for report and test, and steph for the initial patch.

Backport of r14574 from trunk.

git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@15044 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit 6c32577d31cdb26fa83c22bb3276e850447e196a 1 parent 56007af
@ramiro ramiro authored
View
25 django/contrib/formtools/tests.py
@@ -116,7 +116,7 @@ def test_textfield_hash(self):
hash1 = utils.security_hash(None, f1)
hash2 = utils.security_hash(None, f2)
self.assertEqual(hash1, hash2)
-
+
def test_empty_permitted(self):
"""
Regression test for #10643: the security hash should allow forms with
@@ -214,3 +214,26 @@ def process_step(self, request, form, step):
wizard(DummyRequest(POST=data))
self.assertTrue(reached[0])
+ 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])
View
6 django/contrib/formtools/wizard.py
@@ -94,9 +94,9 @@ def __call__(self, request, *args, **kwargs):
# 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 request.POST.get("hash_%d" % i, '') != self.security_hash(request, f):
return self.render_hash_failure(request, i)
@@ -111,7 +111,7 @@ def __call__(self, request, *args, **kwargs):
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
Please sign in to comment.
Something went wrong with that request. Please try again.