make adminsortable work with descending ordering

master
Dominique Lederer 2012-03-15 09:58:52 +01:00
parent cbbcf901fc
commit fef90e6d0c
1 changed files with 10 additions and 4 deletions

View File

@ -148,14 +148,20 @@ class SortableAdmin(ModelAdmin):
indexes = map(str, request.POST.get('indexes', []).split(',')) indexes = map(str, request.POST.get('indexes', []).split(','))
klass = ContentType.objects.get(id=model_type_id).model_class() klass = ContentType.objects.get(id=model_type_id).model_class()
objects_dict = dict([(str(obj.pk), obj) for obj in klass.objects.filter(pk__in=indexes)]) objects_dict = dict([(str(obj.pk), obj) for obj in klass.objects.filter(pk__in=indexes)])
lowest_ordered_object = min(objects_dict.values(), key=lambda x: getattr(x, 'order')) if '-order' in klass._meta.ordering: #desc order
min_index = getattr(lowest_ordered_object, 'order') or 0 start_object = max(objects_dict.values(), key=lambda x: getattr(x, 'order'))
start_index = getattr(start_object, 'order') or len(indexes)
step = -1
else: #'order' is default, asc order
start_object = min(objects_dict.values(), key=lambda x: getattr(x, 'order'))
start_index = getattr(start_object, 'order') or 0
step = 1
for index in indexes: for index in indexes:
obj = objects_dict.get(index) obj = objects_dict.get(index)
setattr(obj, 'order', min_index) setattr(obj, 'order', start_index)
obj.save() obj.save()
min_index += 1 start_index += step
response = {'objects_sorted' : True} response = {'objects_sorted' : True}
except (Key, IndexError, klass.DoesNotExist, AttributeError): except (Key, IndexError, klass.DoesNotExist, AttributeError):