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

Fixed #10082 -- Modified BaseFormSet so that ordering checks work when the...

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.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@10643 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 0c1d38bd
Loading
Loading
Loading
Loading
+10 −10
Original line number Diff line number Diff line
@@ -170,6 +170,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
@@ -180,8 +182,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 ###########################################