mirror of
https://github.com/django/django.git
synced 2025-07-18 16:49:13 +00:00
[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
This commit is contained in:
parent
e114ffb90a
commit
bf10bded7a
@ -158,18 +158,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…
x
Reference in New Issue
Block a user