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
This commit is contained in:
Luke Plant 2010-11-16 14:37:00 +00:00
parent b9e6db4ae8
commit b84838aef4
2 changed files with 27 additions and 3 deletions

View File

@ -360,3 +360,27 @@ class WizardTests(TestCase):
"wizard_step": "1"} "wizard_step": "1"}
wizard(DummyRequest(POST=data)) 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])

View File

@ -116,9 +116,9 @@ class FormWizard(object):
# Since the hashes only take into account values, and not other # Since the hashes only take into account values, and not other
# other validation the form might do, we must re-do validation # other validation the form might do, we must re-do validation
# now for security reasons. # 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): if not self._check_security_hash(request.POST.get("hash_%d" % i, ''), request, f):
return self.render_hash_failure(request, i) return self.render_hash_failure(request, i)
@ -132,7 +132,7 @@ class FormWizard(object):
next_step = current_step + 1 next_step = current_step + 1
if next_step == self.num_steps(): if next_step == self.num_steps():
return self.done(request, current_form_list) return self.done(request, previous_form_list + [form])
else: else:
form = self.get_form(next_step) form = self.get_form(next_step)
self.step = current_step = next_step self.step = current_step = next_step