Django-MPTT - 通过直接后代的计数来排序根节点

时间:2011-06-29 18:55:20

标签: django-queryset django-mptt

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

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:3)

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

from django.db.models import Count

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

如果您需要自己访问子实例,您可能还希望看一下qs.prefetch_related('children')