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
This commit is contained in:
parent
0c1d38bdf4
commit
2ba9df2f41
|
@ -170,18 +170,18 @@ class BaseFormSet(StrAndUnicode):
|
||||||
# don't add data marked for deletion to self.ordered_data
|
# 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 form.cleaned_data[DELETION_FIELD_NAME]:
|
||||||
continue
|
continue
|
||||||
# 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
|
|
||||||
# blamk.
|
|
||||||
def compare_ordering_values(x, y):
|
|
||||||
if x[1] is None:
|
|
||||||
return 1
|
|
||||||
if y[1] is None:
|
|
||||||
return -1
|
|
||||||
return x[1] - y[1]
|
|
||||||
self._ordering.append((i, form.cleaned_data[ORDERING_FIELD_NAME]))
|
self._ordering.append((i, form.cleaned_data[ORDERING_FIELD_NAME]))
|
||||||
# After we're done populating self._ordering, sort it.
|
# 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
|
||||||
|
# blamk.
|
||||||
|
def compare_ordering_values(x, y):
|
||||||
|
if x[1] is None:
|
||||||
|
return 1
|
||||||
|
if y[1] is None:
|
||||||
|
return -1
|
||||||
|
return x[1] - y[1]
|
||||||
self._ordering.sort(compare_ordering_values)
|
self._ordering.sort(compare_ordering_values)
|
||||||
# Return a list of form.cleaned_data dicts in the order spcified by
|
# Return a list of form.cleaned_data dicts in the order spcified by
|
||||||
# the form data.
|
# the form data.
|
||||||
|
|
|
@ -394,6 +394,18 @@ True
|
||||||
{'votes': 500, 'ORDER': None, 'choice': u'The Decemberists'}
|
{'votes': 500, 'ORDER': None, 'choice': u'The Decemberists'}
|
||||||
{'votes': 50, 'ORDER': None, 'choice': u'Basia Bulat'}
|
{'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 ###########################################
|
# FormSets with ordering + deletion ###########################################
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue