summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorRamiro Morales <cramm0@gmail.com>2012-01-15 01:36:14 +0000
committerRamiro Morales <cramm0@gmail.com>2012-01-15 01:36:14 +0000
commite308cfc0e155f51f14c8eb4e678c15c5f632ae30 (patch)
tree037ed46d6790adc32e1483c7240317e5ef31e38c /django
parent4e29b70b9dfb836a6ece537728f1ad9702786948 (diff)
Added support for specifying initial values to model formsets and inline formsets.
This make them consistent with the similar capability of regular formsets. Thanks to simon29 form the report and to Claude Paroz for the patch. Fixes #14574. git-svn-id: http://code.djangoproject.com/svn/django/trunk@17373 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django')
-rw-r--r--django/forms/formsets.py2
-rw-r--r--django/forms/models.py11
2 files changed, 10 insertions, 3 deletions
diff --git a/django/forms/formsets.py b/django/forms/formsets.py
index 9cdd05198c..dcd2f017e7 100644
--- a/django/forms/formsets.py
+++ b/django/forms/formsets.py
@@ -122,7 +122,7 @@ class BaseFormSet(StrAndUnicode):
if self.is_bound:
defaults['data'] = self.data
defaults['files'] = self.files
- if self.initial:
+ if self.initial and not 'initial' in kwargs:
try:
defaults['initial'] = self.initial[i]
except IndexError:
diff --git a/django/forms/models.py b/django/forms/models.py
index b65f067846..15d50419d4 100644
--- a/django/forms/models.py
+++ b/django/forms/models.py
@@ -418,6 +418,7 @@ class BaseModelFormSet(BaseFormSet):
def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
queryset=None, **kwargs):
self.queryset = queryset
+ self.initial_extra = kwargs.pop('initial', None)
defaults = {'data': data, 'files': files, 'auto_id': auto_id, 'prefix': prefix}
defaults.update(kwargs)
super(BaseModelFormSet, self).__init__(**defaults)
@@ -448,6 +449,12 @@ class BaseModelFormSet(BaseFormSet):
kwargs['instance'] = self._existing_object(pk)
if i < self.initial_form_count() and not kwargs.get('instance'):
kwargs['instance'] = self.get_queryset()[i]
+ if i >= self.initial_form_count() and self.initial_extra:
+ # Set initial values for extra forms
+ try:
+ kwargs['initial'] = self.initial_extra[i-self.initial_form_count()]
+ except IndexError:
+ pass
return super(BaseModelFormSet, self)._construct_form(i, **kwargs)
def get_queryset(self):
@@ -674,7 +681,7 @@ def modelformset_factory(model, form=ModelForm, formfield_callback=None,
class BaseInlineFormSet(BaseModelFormSet):
"""A formset for child objects related to a parent."""
def __init__(self, data=None, files=None, instance=None,
- save_as_new=False, prefix=None, queryset=None):
+ save_as_new=False, prefix=None, queryset=None, **kwargs):
from django.db.models.fields.related import RelatedObject
if instance is None:
self.instance = self.fk.rel.to()
@@ -687,7 +694,7 @@ class BaseInlineFormSet(BaseModelFormSet):
queryset = self.model._default_manager
qs = queryset.filter(**{self.fk.name: self.instance})
super(BaseInlineFormSet, self).__init__(data, files, prefix=prefix,
- queryset=qs)
+ queryset=qs, **kwargs)
def initial_form_count(self):
if self.save_as_new: