summaryrefslogtreecommitdiff
path: root/django/forms
diff options
context:
space:
mode:
authorRussell Keith-Magee <russell@keith-magee.com>2010-03-12 15:51:00 +0000
committerRussell Keith-Magee <russell@keith-magee.com>2010-03-12 15:51:00 +0000
commit4120a181e9109383ab35df52dbb3621302a75a72 (patch)
tree0ba0ea974006580a0d1936d94b95e2f5db259739 /django/forms
parentfbf00078e1bdd702f95c7b56277fe602b3bda9e1 (diff)
Fixed #11801 -- Corrected form validation to ensure you can still get deleted_forms and ordered_forms when a form that is being deleted doesn't validate. Thanks to dantallis for the report and patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@12771 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/forms')
-rw-r--r--django/forms/formsets.py21
1 files changed, 12 insertions, 9 deletions
diff --git a/django/forms/formsets.py b/django/forms/formsets.py
index 7acf238795..ec14f813e9 100644
--- a/django/forms/formsets.py
+++ b/django/forms/formsets.py
@@ -163,7 +163,7 @@ class BaseFormSet(StrAndUnicode):
# if this is an extra form and hasn't changed, don't consider it
if i >= self.initial_form_count() and not form.has_changed():
continue
- if form.cleaned_data[DELETION_FIELD_NAME]:
+ if self._should_delete_form(form):
self._deleted_form_indexes.append(i)
return [self.forms[i] for i in self._deleted_form_indexes]
deleted_forms = property(_get_deleted_forms)
@@ -187,7 +187,7 @@ class BaseFormSet(StrAndUnicode):
if i >= self.initial_form_count() and not form.has_changed():
continue
# don't add data marked for deletion to self.ordered_data
- if self.can_delete and form.cleaned_data[DELETION_FIELD_NAME]:
+ if self.can_delete and self._should_delete_form(form):
continue
self._ordering.append((i, form.cleaned_data[ORDERING_FIELD_NAME]))
# After we're done populating self._ordering, sort it.
@@ -231,6 +231,15 @@ class BaseFormSet(StrAndUnicode):
return self._errors
errors = property(_get_errors)
+ def _should_delete_form(self, form):
+ # The way we lookup the value of the deletion field here takes
+ # more code than we'd like, but the form's cleaned_data will
+ # not exist if the form is invalid.
+ field = form.fields[DELETION_FIELD_NAME]
+ raw_value = form._raw_value(DELETION_FIELD_NAME)
+ should_delete = field.clean(raw_value)
+ return should_delete
+
def is_valid(self):
"""
Returns True if form.errors is empty for every form in self.forms.
@@ -243,13 +252,7 @@ class BaseFormSet(StrAndUnicode):
for i in range(0, self.total_form_count()):
form = self.forms[i]
if self.can_delete:
- # The way we lookup the value of the deletion field here takes
- # more code than we'd like, but the form's cleaned_data will
- # not exist if the form is invalid.
- field = form.fields[DELETION_FIELD_NAME]
- raw_value = form._raw_value(DELETION_FIELD_NAME)
- should_delete = field.clean(raw_value)
- if should_delete:
+ if self._should_delete_form(form):
# This form is going to be deleted so any of its errors
# should not cause the entire formset to be invalid.
continue