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.