Refactored do_sorting_view to get start_index default value from len(indexes) rather than duplicate the line and set to 0.
Added NonSortableParentAdmin class to enable sorting URLs and JavaScript on models that do not inherit from Sortable. Removed unused 'ordering' property on SortableAdmin. Changed assignment of sorting_filters to use getattr, enabling NonSortableParentAdmin to inherit from SortableAdminBase. Moved template properties to SortableAdminBase.master
parent
b880018f71
commit
f33f5e90ed
|
|
@ -27,6 +27,14 @@ STATIC_URL = settings.STATIC_URL
|
|||
|
||||
|
||||
class SortableAdminBase(object):
|
||||
sortable_change_list_with_sort_link_template = \
|
||||
'adminsortable/change_list_with_sort_link.html'
|
||||
sortable_change_form_template = 'adminsortable/change_form.html'
|
||||
sortable_change_list_template = 'adminsortable/change_list.html'
|
||||
|
||||
change_form_template_extends = 'admin/change_form.html'
|
||||
change_list_template_extends = 'admin/change_list.html'
|
||||
|
||||
def changelist_view(self, request, extra_context=None):
|
||||
"""
|
||||
If the model that inherits Sortable has more than one object,
|
||||
|
|
@ -45,7 +53,7 @@ class SortableAdminBase(object):
|
|||
extra_context.update({
|
||||
'change_list_template_extends': self.change_list_template_extends,
|
||||
'sorting_filters': [sort_filter[0] for sort_filter
|
||||
in self.model.sorting_filters]
|
||||
in getattr(self.model, 'sorting_filters', [])]
|
||||
})
|
||||
return super(SortableAdminBase, self).changelist_view(request,
|
||||
extra_context=extra_context)
|
||||
|
|
@ -56,15 +64,6 @@ class SortableAdmin(SortableAdminBase, ModelAdmin):
|
|||
Admin class to add template overrides and context objects to enable
|
||||
drag-and-drop ordering.
|
||||
"""
|
||||
ordering = ('order', 'id')
|
||||
|
||||
sortable_change_list_with_sort_link_template = \
|
||||
'adminsortable/change_list_with_sort_link.html'
|
||||
sortable_change_form_template = 'adminsortable/change_form.html'
|
||||
sortable_change_list_template = 'adminsortable/change_list.html'
|
||||
|
||||
change_form_template_extends = 'admin/change_form.html'
|
||||
change_list_template_extends = 'admin/change_list.html'
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
|
@ -89,6 +88,7 @@ class SortableAdmin(SortableAdminBase, ModelAdmin):
|
|||
Custom admin view that displays the objects as a list whose sort
|
||||
order can be changed via drag-and-drop.
|
||||
"""
|
||||
|
||||
opts = self.model._meta
|
||||
has_perm = request.user.has_perm('{0}.{1}'.format(opts.app_label,
|
||||
opts.get_change_permission()))
|
||||
|
|
@ -226,17 +226,17 @@ class SortableAdmin(SortableAdminBase, ModelAdmin):
|
|||
id=model_type_id).model_class()
|
||||
objects_dict = dict([(str(obj.pk), obj) for obj in
|
||||
klass.objects.filter(pk__in=indexes)])
|
||||
if '-order' in klass._meta.ordering: # desc order
|
||||
|
||||
if '-order' in klass._meta.ordering:
|
||||
step = -1
|
||||
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
|
||||
else:
|
||||
step = 1
|
||||
start_object = min(objects_dict.values(),
|
||||
key=lambda x: getattr(x, 'order'))
|
||||
start_index = getattr(start_object, 'order') or 0
|
||||
step = 1
|
||||
|
||||
start_index = getattr(start_object, 'order', len(indexes))
|
||||
|
||||
for index in indexes:
|
||||
obj = objects_dict.get(index)
|
||||
|
|
@ -252,6 +252,12 @@ class SortableAdmin(SortableAdminBase, ModelAdmin):
|
|||
content_type='application/json')
|
||||
|
||||
|
||||
class NonSortableParentAdmin(SortableAdmin):
|
||||
def changelist_view(self, request, extra_context=None):
|
||||
return super(SortableAdminBase, self).changelist_view(request,
|
||||
extra_context=extra_context)
|
||||
|
||||
|
||||
class SortableInlineBase(SortableAdminBase, InlineModelAdmin):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(SortableInlineBase, self).__init__(*args, **kwargs)
|
||||
|
|
|
|||
Loading…
Reference in New Issue