Django-MPTT - 按直接后代的数量对根节点进行排序

发布于 2024-11-18 06:37:43 字数 124 浏览 3 评论 0原文

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

I'm using Django-MPTT to do a display a simple 2 level hierarchy (root => child(ren)). I'm looking for a way to structure my queryset so that nodes get returned with the root node having the most children first and the node with the least children (if any) last.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

好久不见√ 2024-11-25 06:37:43

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

from django.db.models import Count

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

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

Take a look at your parent field and make note of the related_name. Suppose it is children. Then do the following:

from django.db.models import Count

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

If you need access to the child instances themselves, you may also want to look at doing a qs.prefetch_related('children') as well.

无声无音无过去 2024-11-25 06:37:43

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

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)

something like this should do it:

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)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文