Author: jezdez
Date: 2011-06-14 03:35:02 -0700 (Tue, 14 Jun 2011)
New Revision: 16398

Modified:
   django/trunk/django/contrib/formtools/wizard/tests/formtests.py
   django/trunk/django/contrib/formtools/wizard/views.py
   django/trunk/docs/ref/contrib/formtools/form-wizard.txt
Log:
Fixed #16236 -- Added get_form_kwargs method to WizardView as a way to easily 
provide kwargs to each step form.

Modified: django/trunk/django/contrib/formtools/wizard/tests/formtests.py
===================================================================
--- django/trunk/django/contrib/formtools/wizard/tests/formtests.py     
2011-06-14 10:34:52 UTC (rev 16397)
+++ django/trunk/django/contrib/formtools/wizard/tests/formtests.py     
2011-06-14 10:35:02 UTC (rev 16398)
@@ -35,6 +35,12 @@
 class Step3(forms.Form):
     data = forms.CharField()
 
+class CustomKwargsStep1(Step1):
+
+    def __init__(self, test=None, *args, **kwargs):
+        self.test = test
+        return super(CustomKwargsStep1, self).__init__(*args, **kwargs)
+
 class UserForm(forms.ModelForm):
     class Meta:
         model = User
@@ -48,6 +54,12 @@
         response = super(TestWizard, self).dispatch(request, *args, **kwargs)
         return response, self
 
+    def get_form_kwargs(self, step, *args, **kwargs):
+        kwargs = super(TestWizard, self).get_form_kwargs(step, *args, **kwargs)
+        if step == 'kwargs_test':
+            kwargs['test'] = True
+        return kwargs
+
 class FormTests(TestCase):
     def test_form_init(self):
         testform = TestWizard.get_initkwargs([Step1, Step2])
@@ -102,6 +114,17 @@
         response, instance = testform(request)
         self.assertEquals(instance.get_next_step(), 'step3')
 
+    def test_form_kwargs(self):
+        request = get_request()
+
+        testform = TestWizard.as_view([('start', Step1),
+            ('kwargs_test', CustomKwargsStep1)])
+        response, instance = testform(request)
+
+        self.assertEqual(instance.get_form_kwargs('start'), {})
+        self.assertEqual(instance.get_form_kwargs('kwargs_test'), {'test': 
True})
+        self.assertEqual(instance.get_form('kwargs_test').test, True)
+
     def test_form_prefix(self):
         request = get_request()
 

Modified: django/trunk/django/contrib/formtools/wizard/views.py
===================================================================
--- django/trunk/django/contrib/formtools/wizard/views.py       2011-06-14 
10:34:52 UTC (rev 16397)
+++ django/trunk/django/contrib/formtools/wizard/views.py       2011-06-14 
10:35:02 UTC (rev 16398)
@@ -354,6 +354,13 @@
         """
         return self.instance_dict.get(step, None)
 
+    def get_form_kwargs(self, step=None):
+        """
+        Returns the keyword arguments for instantiating the form
+        (or formset) on given step.
+        """
+        return {}
+
     def get_form(self, step=None, data=None, files=None):
         """
         Constructs the form for a given `step`. If no `step` is defined, the
@@ -366,12 +373,13 @@
         if step is None:
             step = self.steps.current
         # prepare the kwargs for the form instance.
-        kwargs = {
+        kwargs = self.get_form_kwargs(step)
+        kwargs.update({
             'data': data,
             'files': files,
             'prefix': self.get_form_prefix(step, self.form_list[step]),
             'initial': self.get_form_initial(step),
-        }
+        })
         if issubclass(self.form_list[step], forms.ModelForm):
             # If the form is based on ModelForm, add instance if available.
             kwargs.update({'instance': self.get_form_instance(step)})

Modified: django/trunk/docs/ref/contrib/formtools/form-wizard.txt
===================================================================
--- django/trunk/docs/ref/contrib/formtools/form-wizard.txt     2011-06-14 
10:34:52 UTC (rev 16397)
+++ django/trunk/docs/ref/contrib/formtools/form-wizard.txt     2011-06-14 
10:35:02 UTC (rev 16398)
@@ -271,6 +271,16 @@
         def get_form_initial(self, step):
             return self.initial_dict.get(step, {})
 
+.. method:: WizardView.get_form_kwargs(step)
+
+    Returns a dictionary which will be used as the keyword arguments when
+    instantiating the form instance on given ``step``.
+
+    The default implementation::
+
+        def get_form_kwargs(self, step):
+            return {}
+
 .. method:: WizardView.get_form_instance(step)
 
     Returns a object which will be passed to the form for ``step`` as

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.

Reply via email to