diff --git a/adminsortable/admin.py b/adminsortable/admin.py index 1166448..794d94b 100644 --- a/adminsortable/admin.py +++ b/adminsortable/admin.py @@ -148,14 +148,20 @@ class SortableAdmin(ModelAdmin): indexes = map(str, request.POST.get('indexes', []).split(',')) 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)]) - lowest_ordered_object = min(objects_dict.values(), key=lambda x: getattr(x, 'order')) - min_index = getattr(lowest_ordered_object, 'order') or 0 + if '-order' in klass._meta.ordering: #desc order + 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: obj = objects_dict.get(index) - setattr(obj, 'order', min_index) + setattr(obj, 'order', start_index) obj.save() - min_index += 1 + start_index += step response = {'objects_sorted' : True} except (Key, IndexError, klass.DoesNotExist, AttributeError):