summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorSergei Maertens <sergei@maykinmedia.nl>2015-06-04 12:47:43 +0200
committerSergei Maertens <sergei@maykinmedia.nl>2015-06-04 15:13:55 +0200
commit238e2ac3690755d0e6c2dfca815e2b6f84a47f6e (patch)
treee7147d51bb64e769b7c7030e0cc00319a2d6c5f7 /docs
parent57dbc87ade5533d78089690ec7795034ff69177a (diff)
Fixed #18166 -- Added form_kwargs support to formsets.
By specifying form_kwargs when instantiating the formset, or overriding the `get_form_kwargs` method on a formset class, you can pass extra keyword arguments to the underlying `Form` instances. Includes tests and documentation update.
Diffstat (limited to 'docs')
-rw-r--r--docs/topics/forms/formsets.txt39
1 files changed, 39 insertions, 0 deletions
diff --git a/docs/topics/forms/formsets.txt b/docs/topics/forms/formsets.txt
index 906fe82c7b..97de9810e8 100644
--- a/docs/topics/forms/formsets.txt
+++ b/docs/topics/forms/formsets.txt
@@ -238,6 +238,8 @@ pre-filled, and is also used to determine how many forms are required. You
will probably never need to override either of these methods, so please be
sure you understand what they do before doing so.
+.. _empty_form:
+
``empty_form``
~~~~~~~~~~~~~~
@@ -533,6 +535,43 @@ default fields/attributes of the order and deletion fields::
<tr><th><label for="id_form-0-pub_date">Pub date:</label></th><td><input type="text" name="form-0-pub_date" id="id_form-0-pub_date" /></td></tr>
<tr><th><label for="id_form-0-my_field">My field:</label></th><td><input type="text" name="form-0-my_field" id="id_form-0-my_field" /></td></tr>
+Passing custom parameters to formset forms
+------------------------------------------
+
+Sometimes your form class takes custom parameters, like ``MyArticleForm``.
+You can pass this parameter when instantiating the formset::
+
+ >>> from django.forms.formsets import BaseFormSet
+ >>> from django.forms.formsets import formset_factory
+ >>> from myapp.forms import ArticleForm
+
+ >>> class MyArticleForm(ArticleForm):
+ ... def __init__(self, *args, **kwargs):
+ ... self.user = kwargs.pop('user')
+ ... super(MyArticleForm, self).__init__(*args, **kwargs)
+
+ >>> ArticleFormSet = formset_factory(MyArticleForm)
+ >>> formset = ArticleFormSet(form_kwargs={'user': request.user})
+
+The ``form_kwargs`` may also depend on the specific form instance. The formset
+base class provides a ``get_form_kwargs`` method. The method takes a single
+argument - the index of the form in the formset. The index is ``None`` for the
+:ref:`empty_form`::
+
+ >>> from django.forms.formsets import BaseFormSet
+ >>> from django.forms.formsets import formset_factory
+
+ >>> class BaseArticleFormSet(BaseFormSet):
+ ... def get_form_kwargs(self, index):
+ ... kwargs = super(BaseArticleFormSet, self).get_form_kwargs(index)
+ ... kwargs['custom_kwarg'] = index
+ ... return kwargs
+
+
+.. versionadded:: 1.9
+
+ The ``form_kwargs`` argument was added.
+
Using a formset in views and templates
--------------------------------------