我的应用程序需要对子节点进行排序,并保持子顺序相同。
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似乎容易出错并且对性能不友好。