summaryrefslogtreecommitdiff
path: root/django/forms
diff options
context:
space:
mode:
Diffstat (limited to 'django/forms')
-rw-r--r--django/forms/formsets.py17
-rw-r--r--django/forms/models.py5
2 files changed, 20 insertions, 2 deletions
diff --git a/django/forms/formsets.py b/django/forms/formsets.py
index d5101c762e..a86c18f138 100644
--- a/django/forms/formsets.py
+++ b/django/forms/formsets.py
@@ -119,6 +119,21 @@ class BaseFormSet(StrAndUnicode):
return self.forms[self.initial_form_count():]
extra_forms = property(_get_extra_forms)
+ def _get_empty_form(self, **kwargs):
+ defaults = {
+ 'auto_id': self.auto_id,
+ 'prefix': self.add_prefix('__prefix__'),
+ 'empty_permitted': True,
+ }
+ if self.data or self.files:
+ defaults['data'] = self.data
+ defaults['files'] = self.files
+ defaults.update(kwargs)
+ form = self.form(**defaults)
+ self.add_fields(form, None)
+ return form
+ empty_form = property(_get_empty_form)
+
# Maybe this should just go away?
def _get_cleaned_data(self):
"""
@@ -268,7 +283,7 @@ class BaseFormSet(StrAndUnicode):
"""A hook for adding extra fields on to each form instance."""
if self.can_order:
# Only pre-fill the ordering field for initial forms.
- if index < self.initial_form_count():
+ if index is not None and index < self.initial_form_count():
form.fields[ORDERING_FIELD_NAME] = IntegerField(label=_(u'Order'), initial=index+1, required=False)
else:
form.fields[ORDERING_FIELD_NAME] = IntegerField(label=_(u'Order'), required=False)
diff --git a/django/forms/models.py b/django/forms/models.py
index ec28b446bd..f343a1cbcd 100644
--- a/django/forms/models.py
+++ b/django/forms/models.py
@@ -620,7 +620,10 @@ class BaseModelFormSet(BaseFormSet):
pk_value = form.instance.pk
else:
try:
- pk_value = self.get_queryset()[index].pk
+ if index is not None:
+ pk_value = self.get_queryset()[index].pk
+ else:
+ pk_value = None
except IndexError:
pk_value = None
if isinstance(pk, OneToOneField) or isinstance(pk, ForeignKey):