mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	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:
		| @@ -170,18 +170,18 @@ 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 | ||||
|                 # 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])) | ||||
|             # 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) | ||||
|         # Return a list of form.cleaned_data dicts in the order spcified by | ||||
|         # the form data. | ||||
|   | ||||
| @@ -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 ########################################### | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user