Merge pull request #185 from ixc/ixc/improve-performance-master
Fixed #162 -- Improve performance of sort view.master
commit
f6522d0a49
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 %}
|
||||
<div id="sortable">
|
||||
{% 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 %}
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,9 +1,8 @@
|
|||
{% load adminsortable_tags %}
|
||||
{% with list_objects_length=list_objects|length %}
|
||||
{% for object in list_objects %}
|
||||
<li>
|
||||
{% if list_objects_length > 1 %}
|
||||
{% render_object_rep object forloop %}
|
||||
{% include "adminsortable/shared/object_rep.html" %}
|
||||
{% else %}
|
||||
{{ object }}
|
||||
{% endif %}
|
||||
|
|
|
|||
|
|
@ -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 %}
|
||||
<ul {% if sortable_by_class_is_sortable %}class="sortable"{% endif %}>
|
||||
|
|
@ -6,7 +6,7 @@
|
|||
{% with object=regrouped_object.grouper %}
|
||||
{% if object %}
|
||||
<li class="parent">{% if sortable_by_class_is_sortable %}
|
||||
{% render_object_rep object forloop %}
|
||||
{% include "adminsortable/shared/object_rep.html" %}
|
||||
{% else %}
|
||||
{{ object }}
|
||||
{% endif %}
|
||||
|
|
@ -14,7 +14,7 @@
|
|||
{% if regrouped_object.list %}
|
||||
{% with regrouped_object_list_length=regrouped_object.list|length %}
|
||||
<ul {% if regrouped_object_list_length > 1 %}class="sortable"{% endif %}>
|
||||
{% render_list_items regrouped_object.list %}
|
||||
{% include "adminsortable/shared/list_items.html" with list_objects=regrouped_object.list %}
|
||||
</ul>
|
||||
{% endwith %}
|
||||
{% endif %}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
{% load adminsortable_tags admin_urls %}
|
||||
{% load admin_urls %}
|
||||
|
||||
<form>
|
||||
<input name="pk" type="hidden" value="{{ object.pk }}" />
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
{% load adminsortable_tags %}
|
||||
|
||||
{% if objects %}
|
||||
<ul class="sortable single">
|
||||
{% render_list_items objects %}
|
||||
{% include "adminsortable/shared/list_items.html" with list_objects=objects %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
from django.template.loader import render_to_string
|
||||
|
||||
from django import template
|
||||
register = template.Library()
|
||||
|
||||
|
||||
@register.simple_tag(takes_context=True)
|
||||
def render_sortable_objects(context, objects,
|
||||
sortable_objects_template='adminsortable/shared/objects.html'):
|
||||
context.update({'objects': objects})
|
||||
return render_to_string(sortable_objects_template, context.flatten())
|
||||
|
||||
|
||||
@register.simple_tag(takes_context=True)
|
||||
def render_nested_sortable_objects(context, objects, group_expression,
|
||||
sortable_nested_objects_template='adminsortable/shared/nested_objects.html'):
|
||||
context.update({'objects': objects, 'group_expression': group_expression})
|
||||
return render_to_string(sortable_nested_objects_template, context.flatten())
|
||||
|
||||
|
||||
@register.simple_tag(takes_context=True)
|
||||
def render_list_items(context, list_objects,
|
||||
sortable_list_items_template='adminsortable/shared/list_items.html'):
|
||||
context.update({'list_objects': list_objects})
|
||||
return render_to_string(sortable_list_items_template, context.flatten())
|
||||
|
||||
|
||||
@register.simple_tag(takes_context=True)
|
||||
def render_object_rep(context, obj, forloop,
|
||||
sortable_object_rep_template='adminsortable/shared/object_rep.html'):
|
||||
context.update({'object': obj, 'forloop': forloop})
|
||||
return render_to_string(sortable_object_rep_template, context.flatten())
|
||||
Loading…
Reference in New Issue