summaryrefslogtreecommitdiff
path: root/django/forms
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 /django/forms
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 'django/forms')
-rw-r--r--django/forms/formsets.py13
1 files changed, 11 insertions, 2 deletions
diff --git a/django/forms/formsets.py b/django/forms/formsets.py
index eafe35720f..444c84c9d4 100644
--- a/django/forms/formsets.py
+++ b/django/forms/formsets.py
@@ -54,13 +54,14 @@ class BaseFormSet(object):
A collection of instances of the same Form class.
"""
def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
- initial=None, error_class=ErrorList):
+ initial=None, error_class=ErrorList, form_kwargs=None):
self.is_bound = data is not None or files is not None
self.prefix = prefix or self.get_default_prefix()
self.auto_id = auto_id
self.data = data or {}
self.files = files or {}
self.initial = initial
+ self.form_kwargs = form_kwargs or {}
self.error_class = error_class
self._errors = None
self._non_form_errors = None
@@ -139,9 +140,16 @@ class BaseFormSet(object):
Instantiate forms at first property access.
"""
# DoS protection is included in total_form_count()
- forms = [self._construct_form(i) for i in range(self.total_form_count())]
+ forms = [self._construct_form(i, **self.get_form_kwargs(i))
+ for i in range(self.total_form_count())]
return forms
+ def get_form_kwargs(self, index):
+ """
+ Return additional keyword arguments for each individual formset form.
+ """
+ return self.form_kwargs.copy()
+
def _construct_form(self, i, **kwargs):
"""
Instantiates and returns the i-th form instance in a formset.
@@ -184,6 +192,7 @@ class BaseFormSet(object):
auto_id=self.auto_id,
prefix=self.add_prefix('__prefix__'),
empty_permitted=True,
+ **self.get_form_kwargs(None)
)
self.add_fields(form, None)
return form