summaryrefslogtreecommitdiff
path: root/django/forms/formsets.py
diff options
context:
space:
mode:
authorZain Memon <zain@inzain.net>2009-07-02 07:19:44 +0000
committerZain Memon <zain@inzain.net>2009-07-02 07:19:44 +0000
commitd2d63014552ee05c49384976d19696372dccd764 (patch)
treeb45637382d08815b2563297214b49d5b2b9c0869 /django/forms/formsets.py
parentf5bb5b5f981ef839bd0fe95c7d63485a7fa04d81 (diff)
[soc2009/admin-ui] A far better way to implement adding inlines using javascript. Instead of handling all the prefix incrementing in Javascript and losing any default values, added a way to generate a template form that can be cloned every time a new inline is added.
This is for stacked inlines. Support for tabular and selector inlines coming next. git-svn-id: http://code.djangoproject.com/svn/django/branches/soc2009/admin-ui@11152 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/forms/formsets.py')
-rw-r--r--django/forms/formsets.py21
1 files changed, 18 insertions, 3 deletions
diff --git a/django/forms/formsets.py b/django/forms/formsets.py
index 774473b7e6..b0ca9435de 100644
--- a/django/forms/formsets.py
+++ b/django/forms/formsets.py
@@ -118,6 +118,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__")}
+ if self.data or self.files:
+ defaults['data'] = self.data
+ defaults['files'] = self.files
+
+ defaults['empty_permitted'] = True
+ 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):
"""
@@ -133,7 +148,7 @@ class BaseFormSet(StrAndUnicode):
Returns a list of forms that have been marked for deletion. Raises an
AttributeError if deletion is not allowed.
"""
- if not self.can_delete:
+ if not self.is_valid or not self.can_delete:
raise AttributeError("'%s' object has no attribute 'deleted_forms'" % self.__class__.__name__)
# construct _deleted_form_indexes which is just a list of form indexes
# that have had their deletion widget set to True
@@ -154,7 +169,7 @@ class BaseFormSet(StrAndUnicode):
Returns a list of form in the order specified by the incoming data.
Raises an AttributeError if ordering is not allowed.
"""
- if not self.can_order:
+ if not self.is_valid or not self.can_order:
raise AttributeError("'%s' object has no attribute 'ordered_forms'" % self.__class__.__name__)
# Construct _ordering, which is a list of (form_index, order_field_value)
# tuples. After constructing this list, we'll sort it by order_field_value
@@ -267,7 +282,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 != 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)