diff --git a/adminsortable/admin.py b/adminsortable/admin.py index 539d2b1..648c466 100644 --- a/adminsortable/admin.py +++ b/adminsortable/admin.py @@ -102,6 +102,24 @@ class SortableAdmin(SortableAdminBase, ModelAdmin): ] + urls return urls + def get_sort_view_queryset(self, request, sortable_by_expression): + """ + Return a queryset, optionally filtered based on request and + `sortable_by_expression` to be used in the sort view. + """ + # get sort group index from querystring if present + sort_filter_index = request.GET.get('sort_filter') + + filters = {} + if sort_filter_index: + try: + filters = self.model.sorting_filters[int(sort_filter_index)][1] + except (IndexError, ValueError): + pass + + # Apply any sort filters to create a subset of sortable objects + return self.get_queryset(request).filter(**filters) + def sort_view(self, request): """ Custom admin view that displays the objects as a list whose sort @@ -115,19 +133,6 @@ class SortableAdmin(SortableAdminBase, ModelAdmin): jquery_lib_path = 'admin/js/jquery.js' if VERSION < (1, 9) \ else 'admin/js/vendor/jquery/jquery.js' - # get sort group index from querystring if present - sort_filter_index = request.GET.get('sort_filter') - - filters = {} - if sort_filter_index: - try: - filters = self.model.sorting_filters[int(sort_filter_index)][1] - except (IndexError, ValueError): - pass - - # Apply any sort filters to create a subset of sortable objects - objects = self.get_queryset(request).filter(**filters) - # Determine if we need to regroup objects relative to a # foreign key specified on the model class that is extending Sortable. # Legacy support for 'sortable_by' defined as a model property @@ -175,6 +180,8 @@ class SortableAdmin(SortableAdminBase, ModelAdmin): sortable_by_class_display_name = \ sortable_by_class_is_sortable = None + objects = self.get_sort_view_queryset(request, sortable_by_expression) + if sortable_by_property or sortable_by_fk: # Order the objects by the property they are sortable by, # then by the order, otherwise the regroup diff --git a/adminsortable/templates/adminsortable/change_list.html b/adminsortable/templates/adminsortable/change_list.html index 749d830..0dcbbf2 100644 --- a/adminsortable/templates/adminsortable/change_list.html +++ b/adminsortable/templates/adminsortable/change_list.html @@ -1,5 +1,5 @@ {% extends "admin/base_site.html" %} -{% load i18n admin_urls static admin_list adminsortable_tags %} +{% load i18n admin_urls static admin_list %} {% block extrastyle %} {{ block.super }} @@ -86,9 +86,9 @@ {% if objects %}
{% if group_expression %} - {% render_nested_sortable_objects objects group_expression %} + {% include "adminsortable/shared/nested_objects.html" %} {% else %} - {% render_sortable_objects objects %} + {% include "adminsortable/shared/objects.html" %} {% endif %} {% csrf_token %}
diff --git a/adminsortable/templates/adminsortable/shared/list_items.html b/adminsortable/templates/adminsortable/shared/list_items.html index 29df030..21f9005 100644 --- a/adminsortable/templates/adminsortable/shared/list_items.html +++ b/adminsortable/templates/adminsortable/shared/list_items.html @@ -1,9 +1,8 @@ -{% load adminsortable_tags %} {% with list_objects_length=list_objects|length %} {% for object in list_objects %}
  • {% if list_objects_length > 1 %} - {% render_object_rep object forloop %} + {% include "adminsortable/shared/object_rep.html" %} {% else %} {{ object }} {% endif %} diff --git a/adminsortable/templates/adminsortable/shared/nested_objects.html b/adminsortable/templates/adminsortable/shared/nested_objects.html index 8ef74d9..cf0483b 100644 --- a/adminsortable/templates/adminsortable/shared/nested_objects.html +++ b/adminsortable/templates/adminsortable/shared/nested_objects.html @@ -1,4 +1,4 @@ -{% load django_template_additions adminsortable_tags %} +{% load django_template_additions %} {% dynamic_regroup objects by group_expression as regrouped_objects %} {% if regrouped_objects %}