diff --git a/formtools/wizard/views.py b/formtools/wizard/views.py index a72b1a1..596d622 100644 --- a/formtools/wizard/views.py +++ b/formtools/wizard/views.py @@ -406,7 +406,7 @@ def get_form(self, step=None, data=None, files=None): """ if step is None: step = self.steps.current - form_class = self.form_list[step] + form_class = self.get_form_list()[step] # prepare the kwargs for the form instance. kwargs = self.get_form_kwargs(step) kwargs.update({ diff --git a/tests/wizard/test_forms.py b/tests/wizard/test_forms.py index 9b12531..5711848 100644 --- a/tests/wizard/test_forms.py +++ b/tests/wizard/test_forms.py @@ -91,6 +91,14 @@ def done(self, form_list, **kwargs): return http.HttpResponse("All good") +class TestWizardWithCustomGetFormList(TestWizard): + + form_list = [Step1] + + def get_form_list(self): + return {'start': Step1, 'step2': Step2} + + class FormTests(TestCase): def test_form_init(self): testform = TestWizard.get_initkwargs([Step1, Step2]) @@ -257,6 +265,25 @@ def test_form_list_type(self): response, instance = testform(request) self.assertEqual(response.status_code, 200) + def test_get_form_list_default(self): + request = get_request() + testform = TestWizard.as_view([('start', Step1)]) + response, instance = testform(request) + + form_list = instance.get_form_list() + self.assertEqual(form_list, {'start': Step1}) + with self.assertRaises(KeyError): + instance.get_form('step2') + + def test_get_form_list_custom(self): + request = get_request() + testform = TestWizardWithCustomGetFormList.as_view([('start', Step1)]) + response, instance = testform(request) + + form_list = instance.get_form_list() + self.assertEqual(form_list, {'start': Step1, 'step2': Step2}) + self.assertIsInstance(instance.get_form('step2'), Step2) + class SessionFormTests(TestCase): def test_init(self):