diff options
| author | Luke Plant <L.Plant.98@cantab.net> | 2010-11-16 14:37:00 +0000 |
|---|---|---|
| committer | Luke Plant <L.Plant.98@cantab.net> | 2010-11-16 14:37:00 +0000 |
| commit | b84838aef4de49c9567c98bd8a8d492e177e5e4f (patch) | |
| tree | b07242b553108861e1e4e7373cef41f673a15f33 | |
| parent | b9e6db4ae801190cb2db188b8d5a5f0e891a6d56 (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__.py | 24 | ||||
| -rw-r--r-- | django/contrib/formtools/wizard.py | 6 |
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 |
