Author: SmileyChris
Date: 2010-12-09 21:51:30 -0600 (Thu, 09 Dec 2010)
New Revision: 14865

Modified:
   django/trunk/django/views/generic/edit.py
   django/trunk/docs/ref/class-based-views.txt
Log:
Add FormMixin.get_form_kwargs method to abstract some common logic in a tidier
way. Tidy up (and amend) documentation about FormMixin and ModelFormMixin.

Modified: django/trunk/django/views/generic/edit.py
===================================================================
--- django/trunk/django/views/generic/edit.py   2010-12-09 02:34:14 UTC (rev 
14864)
+++ django/trunk/django/views/generic/edit.py   2010-12-10 03:51:30 UTC (rev 
14865)
@@ -31,16 +31,19 @@
         """
         Returns an instance of the form to be used in this view.
         """
+        return form_class(**self.get_form_kwargs())
+
+    def get_form_kwargs(self):
+        """
+        Returns the keyword arguments for instanciating the form.
+        """
+        kwargs = {'initial': self.get_initial()}
         if self.request.method in ('POST', 'PUT'):
-            return form_class(
-                data=self.request.POST,
-                files=self.request.FILES,
-                initial=self.get_initial()
-            )
-        else:
-            return form_class(
-                initial=self.get_initial()
-            )
+            kwargs.update({
+                'data': self.request.POST,
+                'files': self.request.FILES,
+            })
+        return kwargs
 
     def get_context_data(self, **kwargs):
         return kwargs
@@ -75,22 +78,13 @@
             model = self.get_queryset().model
             return model_forms.modelform_factory(model)
 
-    def get_form(self, form_class):
+    def get_form_kwargs(self):
         """
-        Returns a form instantiated with the model instance from get_object().
+        Returns the keyword arguments for instanciating the form.
         """
-        if self.request.method in ('POST', 'PUT'):
-            return form_class(
-                data=self.request.POST,
-                files=self.request.FILES,
-                initial=self.get_initial(),
-                instance=self.object,
-            )
-        else:
-            return form_class(
-                initial=self.get_initial(),
-                instance=self.object,
-            )
+        kwargs = super(ModelFormMixin, self).get_form_kwargs()
+        kwargs.update({'instance': self.object})
+        return kwargs
 
     def get_success_url(self):
         if self.success_url:

Modified: django/trunk/docs/ref/class-based-views.txt
===================================================================
--- django/trunk/docs/ref/class-based-views.txt 2010-12-09 02:34:14 UTC (rev 
14864)
+++ django/trunk/docs/ref/class-based-views.txt 2010-12-10 03:51:30 UTC (rev 
14865)
@@ -413,27 +413,34 @@
     .. method:: get_initial()
 
         Retrieve initial data for the form. By default, returns
-        :attr:`FormMixin.initial`.
+        :attr:`.initial`.
 
     .. method:: get_form_class()
 
-        Retrieve the form class to instantiate. By default,
-        :attr:`FormMixin.form_class`.
+        Retrieve the form class to instantiate. By default
+        :attr:`.form_class`.
 
     .. method:: get_form(form_class)
 
-        Instantiate an instance of ``form_class``. If the request is a ``POST``
-        or ``PUT``, the request data (``request.POST`` and ``request.FILES``)
-        will be provided to the form at time of construction.
+        Instantiate an instance of ``form_class`` using
+        :meth:`.get_form_kwargs`.
 
+    .. method:: get_form_kwargs()
+
+        Build the keyword arguments requried to instanciate an the form.
+        
+        The ``initial`` argument is set to :meth:`.get_initial`. If the
+        request is a ``POST`` or ``PUT``, the request data (``request.POST``
+        and ``request.FILES``) will also be provided.
+
     .. method:: get_success_url()
 
         Determine the URL to redirect to when the form is successfully
-        validated. Returns :attr:`FormMixin.success_url` by default.
+        validated. Returns :attr:`.success_url` by default.
 
     .. method:: form_valid()
 
-        Redirects to :attr:`ModelFormMixin.success_url`.
+        Redirects to :meth:`.get_success_url`.
 
     .. method:: form_invalid()
 
@@ -449,9 +456,9 @@
 
     .. note::
 
-        Views mixing :class:`~django.views.generic.edit.FormMixin` must
-        provide an implementation of :meth:`~FormMixin.form_valid` and
-        :meth:`~FormMixin.form_invalid`.
+        Views mixing :class:`FormMixin` must
+        provide an implementation of :meth:`.form_valid` and
+        :meth:`.form_invalid`.
 
 ModelFormMixin
 ~~~~~~~~~~~~~~
@@ -490,12 +497,10 @@
         :attr:`~SingleObjectMixin.model`, depending on which attribute is
         provided.
 
-    .. method:: get_form(form_class)
+    .. method:: get_form_kwargs()
 
-        Instantiate an instance of ``form_class``. If the request is a ``POST``
-        or ``PUT``, the request data (``request.POST`` and ``request.FILES``)
-        will be provided to the form at time of construction. The current
-        instance (``self.object``) will also be provided.
+        Add the current instance (``self.object``) to the standard
+        :meth:`FormMixin.get_form_kwargs`.
 
     .. method:: get_success_url()
 
@@ -506,7 +511,7 @@
     .. method:: form_valid()
 
         Saves the form instance, sets the current object for the view, and
-        redirects to :attr:`ModelFormMixin.success_url`.
+        redirects to :meth:`.get_success_url`.
 
     .. method:: form_invalid()
 

-- 
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