5

我正在使用 Django-MPTT 来显示一个简单的 2 级层次结构(root => child(ren))。我正在寻找一种方法来构造我的查询集,以便节点首先返回具有最多子节点的根节点,最后返回具有最少子节点(如果有的话)的节点。

4

2 回答 2

4

查看您的parent字段并记下related_name。假设它是children。然后执行以下操作:

from django.db.models import Count

MyMPTTModel.objects.root_nodes().annotate(
    Count('children')).order_by('-children__count')

如果您需要访问子实例本身,您可能还想看看做 a qs.prefetch_related('children')

于 2017-08-08T18:08:45.117 回答
3

像这样的事情应该这样做:

from mptt.templatetags.mptt_tags import cache_tree_children
qs = qs.filter(level__lt=2)
root_nodes = cache_tree_children(qs)
root_nodes.sort(key=lambda node: len(node.get_children()), reverse=True)
于 2012-03-29T20:26:26.770 回答