Skip to content

Commit

Permalink
Fixed #14576 - FormWizard.done() method doesn't get passed the last f…
Browse files Browse the repository at this point in the history
…orm 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
  • Loading branch information
spookylukey committed Nov 16, 2010
1 parent b9e6db4 commit b84838a
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 3 deletions.
24 changes: 24 additions & 0 deletions django/contrib/formtools/tests/__init__.py
Expand Up @@ -360,3 +360,27 @@ def process_step(self, request, form, step):
"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])

6 changes: 3 additions & 3 deletions django/contrib/formtools/wizard.py
Expand Up @@ -116,9 +116,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 not self._check_security_hash(request.POST.get("hash_%d" % i, ''), request, f):
return self.render_hash_failure(request, i)

Expand All @@ -132,7 +132,7 @@ def __call__(self, request, *args, **kwargs):
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
Expand Down

0 comments on commit b84838a

Please sign in to comment.