From 2e909489d7601c59595e81e2b491dfc689abd778 Mon Sep 17 00:00:00 2001 From: Chris Beaven Date: Fri, 10 Dec 2010 03:51:30 +0000 Subject: [PATCH] Add FormMixin.get_form_kwargs method to abstract some common logic in a tidier way. Tidy up (and amend) documentation about FormMixin and ModelFormMixin. git-svn-id: http://code.djangoproject.com/svn/django/trunk@14865 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/views/generic/edit.py | 40 +++++++++++++++------------------- docs/ref/class-based-views.txt | 39 ++++++++++++++++++--------------- 2 files changed, 39 insertions(+), 40 deletions(-) diff --git a/django/views/generic/edit.py b/django/views/generic/edit.py index f7270433c2b..931a2d3fe2f 100644 --- a/django/views/generic/edit.py +++ b/django/views/generic/edit.py @@ -31,16 +31,19 @@ class FormMixin(object): """ 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 @@ class ModelFormMixin(FormMixin, SingleObjectMixin): 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: diff --git a/docs/ref/class-based-views.txt b/docs/ref/class-based-views.txt index 4b51469ced0..4784cd2350b 100644 --- a/docs/ref/class-based-views.txt +++ b/docs/ref/class-based-views.txt @@ -413,27 +413,34 @@ FormMixin .. 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 @@ FormMixin .. 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 @@ ModelFormMixin :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 @@ ModelFormMixin .. 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()