Removed un-needed properties on script tags for JS imports.
Refactored sorting filters from class method into a model property with a default of an empty dictionary. Refactored sortable admin class to not make two calls to determine sortability and also to get objects for sorting. Added sorting_filters to sortable admin queryset.
This commit is contained in:
+8
-16
@@ -28,6 +28,8 @@ STATIC_URL = settings.STATIC_URL
|
||||
|
||||
|
||||
class SortableAdminBase(object):
|
||||
filtered_objects = []
|
||||
|
||||
def changelist_view(self, request, extra_context=None):
|
||||
"""
|
||||
If the model that inherits Sortable has more than one object,
|
||||
@@ -35,12 +37,11 @@ class SortableAdminBase(object):
|
||||
object_tools block to take people to the view to change the sorting.
|
||||
"""
|
||||
|
||||
if self.model.ordering_subset() is not None:
|
||||
objects = self.model.ordering_subset()
|
||||
else:
|
||||
objects = self.queryset(request)
|
||||
# Apply any additional filters to create a subset of sortable objects
|
||||
self.filtered_objects = self.queryset(request).filter(
|
||||
**self.model.sorting_filters)
|
||||
|
||||
if get_is_sortable(objects):
|
||||
if get_is_sortable(self.filtered_objects):
|
||||
self.change_list_template = \
|
||||
self.sortable_change_list_with_sort_link_template
|
||||
self.is_sortable = True
|
||||
@@ -66,8 +67,6 @@ class SortableAdmin(SortableAdminBase, ModelAdmin):
|
||||
'adminsortable/change_list_with_sort_link.html'
|
||||
sortable_change_form_template = 'adminsortable/change_form.html'
|
||||
sortable_change_list_template = 'adminsortable/change_list.html'
|
||||
sortable_javascript_includes_template = \
|
||||
'adminsortable/shared/javascript_includes.html'
|
||||
|
||||
change_form_template_extends = 'admin/change_form.html'
|
||||
change_list_template_extends = 'admin/change_list.html'
|
||||
@@ -107,10 +106,7 @@ class SortableAdmin(SortableAdminBase, ModelAdmin):
|
||||
has_perm = request.user.has_perm('{}.{}'.format(opts.app_label,
|
||||
opts.get_change_permission()))
|
||||
|
||||
if self.model.ordering_subset() is not None:
|
||||
objects = self.model.ordering_subset()
|
||||
else:
|
||||
objects = self.queryset(request)
|
||||
objects = self.filtered_objects
|
||||
|
||||
# Determine if we need to regroup objects relative to a
|
||||
# foreign key specified on the model class that is extending Sortable.
|
||||
@@ -169,9 +165,7 @@ class SortableAdmin(SortableAdminBase, ModelAdmin):
|
||||
'group_expression': sortable_by_expression,
|
||||
'sortable_by_class': sortable_by_class,
|
||||
'sortable_by_class_is_sortable': sortable_by_class_is_sortable,
|
||||
'sortable_by_class_display_name': sortable_by_class_display_name,
|
||||
'sortable_javascript_includes_template':
|
||||
self.sortable_javascript_includes_template
|
||||
'sortable_by_class_display_name': sortable_by_class_display_name
|
||||
}
|
||||
return render(request, self.sortable_change_list_template, context)
|
||||
|
||||
@@ -208,8 +202,6 @@ class SortableAdmin(SortableAdminBase, ModelAdmin):
|
||||
self.change_form_template = self.sortable_change_form_template
|
||||
|
||||
extra_context.update({
|
||||
'sortable_javascript_includes_template':
|
||||
self.sortable_javascript_includes_template,
|
||||
'has_sortable_tabular_inlines':
|
||||
self.has_sortable_tabular_inlines,
|
||||
'has_sortable_stacked_inlines':
|
||||
|
||||
@@ -31,6 +31,7 @@ class Sortable(models.Model):
|
||||
order = models.PositiveIntegerField(editable=False, default=1,
|
||||
db_index=True)
|
||||
is_sortable = False
|
||||
sorting_filters = {}
|
||||
|
||||
# legacy support
|
||||
sortable_by = None
|
||||
@@ -43,10 +44,6 @@ class Sortable(models.Model):
|
||||
def model_type_id(cls):
|
||||
return ContentType.objects.get_for_model(cls).id
|
||||
|
||||
@classmethod
|
||||
def ordering_subset(cls):
|
||||
return None
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(Sortable, self).__init__(*args, **kwargs)
|
||||
|
||||
|
||||
@@ -9,11 +9,11 @@
|
||||
|
||||
{% block extrahead %}
|
||||
{{ block.super }}
|
||||
<script type="text/javascript" src="{% static 'admin/js/jquery.js' %}"></script>
|
||||
<script type="text/javascript" src="{% static 'admin/js/jquery.init.js' %}"></script>
|
||||
<script type="text/javascript" src="{% static 'adminsortable/js/jquery-ui-django-admin.min.js' %}"></script>
|
||||
<script type="text/javascript" src="{% static 'adminsortable/js/jquery.django-csrf.js' %}"></script>
|
||||
<script type="text/javascript" src="{% static 'adminsortable/js/admin.sortable.js' %}"></script>
|
||||
<script src="{% static 'admin/js/jquery.js' %}"></script>
|
||||
<script src="{% static 'admin/js/jquery.init.js' %}"></script>
|
||||
<script src="{% static 'adminsortable/js/jquery-ui-django-admin.min.js' %}"></script>
|
||||
<script src="{% static 'adminsortable/js/jquery.django-csrf.js' %}"></script>
|
||||
<script src="{% static 'adminsortable/js/admin.sortable.js' %}"></script>
|
||||
{% endblock %}
|
||||
|
||||
{% block title %}{% blocktrans with opts.verbose_name_plural|capfirst as model %}Drag and drop {{ model }} to change display order{% endblocktrans %} | {% trans 'Django site admin' %}{% endblock %}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
def get_is_sortable(objects):
|
||||
if objects.count() > 1:
|
||||
return True
|
||||
if objects:
|
||||
if objects.count() > 1:
|
||||
return True
|
||||
return False
|
||||
|
||||
Reference in New Issue
Block a user