Django-MPTT - 按照直接后代数量排序根节点

5

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

2个回答

4

请查看您的parent字段并注意相关名称。 假设它是children。然后执行以下操作:

from django.db.models import Count

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

如果你需要访问子实例本身,你可能还想考虑执行qs.prefetch_related('children')


值得注意的是,如果您的层次结构确实只有两个级别,那么您可能不会从mptt中获得任何好处,因为一个简单的父字段和顺序字段就足够了,而且性能更好...尽管我可能是错的。 - DylanYoung

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接