diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e167ff3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.py[co] +*.egg-info/ \ No newline at end of file diff --git a/treeadmin/admin.py b/treeadmin/admin.py index 1b31089..0782745 100644 --- a/treeadmin/admin.py +++ b/treeadmin/admin.py @@ -3,9 +3,13 @@ from django.contrib.admin.views import main from django.db.models import Q from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseForbidden, HttpResponseNotFound, HttpResponseServerError -from django.utils import simplejson +try: + import django.utils.simplejson +except: + import json as simplejson from django.utils.safestring import mark_safe from django.utils.translation import ugettext_lazy as _, ugettext +from django import VERSION as django_version from mptt.exceptions import InvalidMove @@ -48,7 +52,9 @@ def _build_tree_structure(cls): else: mptt_opts = cls._meta - for p_id, parent_id in cls.objects.order_by(mptt_opts.tree_id_attr, mptt_opts.left_attr).values_list("pk", "%s_id" % mptt_opts.parent_attr): + values_list = [tuple(dct.values()) for dct in cls.objects.order_by(mptt_opts.tree_id_attr, mptt_opts.left_attr).values("pk", "%s_id" % mptt_opts.parent_attr)] + + for p_id, parent_id in values_list: all_nodes[p_id] = [] if parent_id: @@ -127,9 +133,22 @@ def __init__(self, request, *args, **kwargs): self.user = request.user super(ChangeList, self).__init__(request, *args, **kwargs) - def get_query_set(self, *args, **kwargs): + def get_queryset(self, *args, **kwargs): mptt_opts = self.model._mptt_meta - return super(ChangeList, self).get_query_set(*args, **kwargs).order_by(mptt_opts.tree_id_attr, mptt_opts.left_attr) + get_qs = getattr(super(ChangeList, self), 'get_queryset', super(ChangeList, self).get_query_set) + return get_qs(*args, **kwargs).order_by(mptt_opts.tree_id_attr, mptt_opts.left_attr) + + if django_version < (1, 6): + get_query_set = get_queryset + + @property + def query_set(self): + return self.queryset + + @query_set.setter + def query_set(self, qs): + self.queryset = qs + def get_results(self, request): mptt_opts = self.model._mptt_meta @@ -139,9 +158,9 @@ def get_results(self, request): mptt_opts.left_attr + '__lte': lft, mptt_opts.right_attr + '__gte': rght, }) for lft, rght, tree_id in \ - self.query_set.values_list(mptt_opts.left_attr, mptt_opts.right_attr, mptt_opts.tree_id_attr)] + self.queryset.values_list(mptt_opts.left_attr, mptt_opts.right_attr, mptt_opts.tree_id_attr)] if clauses: - self.query_set = self.model._default_manager.filter(reduce(lambda p, q: p|q, clauses)) + self.queryset = self.model._default_manager.filter(reduce(lambda p, q: p|q, clauses)) super(ChangeList, self).get_results(request)