Сортировка корневых узлов в django-mptt - PullRequest
0 голосов
/ 06 ноября 2018

Мое приложение должно сортировать корневые узлы, сохраняя тот же порядок дочерних элементов.

MyModel.objects.all().ordered_by('field') сортирует все узлы, чтобы они не работали.

Сортированный MyModel.objects.root_nodes() набор запросов при перестроении с mptt.managers.TreeManager.get_queryset_descendants() снова сортируется с tree_id, поэтому он возвращается к своему предыдущему состоянию.

Пока мне удалось отсортировать его, преобразовав QuerySet в список и добавив корневой узел и его потомков, вот так:

root_nodes = sorted(Entry.objects.root_nodes(), ...)
qs = []
for node in root_nodes:
    qs.append(node)
    qs.extend(node.get_descendants())

У меня вопрос: есть ли лучший и ненавязчивый способ перестроить TreeQuerySet, используя отсортированные корневые узлы? Поскольку восстановление QuerySet с циклами кажется подверженным ошибкам и не снижает производительность.

...