make adminsortable work with descending ordering
parent
cbbcf901fc
commit
fef90e6d0c
|
|
@ -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):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue