Commit bf10bded authored by Russell Keith-Magee's avatar Russell Keith-Magee
Browse files

[1.0.X] Fixed #10082 -- Modified BaseFormSet so that ordering checks work when...

[1.0.X] Fixed #10082 -- Modified BaseFormSet so that ordering checks work when the formset is empty. Thanks to Petr Marhoun for the report and test case, and bmathieu for the fix.

Merge of r10643 from trunk.

git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.0.X@10644 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent e114ffb9
Loading
Loading
Loading
Loading
+10 −10
Original line number Diff line number Diff line
@@ -158,6 +158,8 @@ class BaseFormSet(StrAndUnicode):
                # don't add data marked for deletion to self.ordered_data
                if self.can_delete and form.cleaned_data[DELETION_FIELD_NAME]:
                    continue
                self._ordering.append((i, form.cleaned_data[ORDERING_FIELD_NAME]))
            # After we're done populating self._ordering, sort it.
            # A sort function to order things numerically ascending, but
            # None should be sorted below anything else. Allowing None as
            # a comparison value makes it so we can leave ordering fields
@@ -168,8 +170,6 @@ class BaseFormSet(StrAndUnicode):
                if y[1] is None:
                    return -1
                return x[1] - y[1]
                self._ordering.append((i, form.cleaned_data[ORDERING_FIELD_NAME]))
            # After we're done populating self._ordering, sort it.
            self._ordering.sort(compare_ordering_values)
        # Return a list of form.cleaned_data dicts in the order spcified by
        # the form data.
+12 −0
Original line number Diff line number Diff line
@@ -394,6 +394,18 @@ True
{'votes': 500, 'ORDER': None, 'choice': u'The Decemberists'}
{'votes': 50, 'ORDER': None, 'choice': u'Basia Bulat'}

Ordering should work with blank fieldsets.

>>> data = {
...     'choices-TOTAL_FORMS': '3', # the number of forms rendered
...     'choices-INITIAL_FORMS': '0', # the number of forms with initial data
... }

>>> formset = ChoiceFormSet(data, auto_id=False, prefix='choices')
>>> formset.is_valid()
True
>>> for form in formset.ordered_forms:
...    print form.cleaned_data

# FormSets with ordering + deletion ###########################################