28得票1回答
Django treebeard中的AL、NS和MP有什么区别?

我正在尝试建立一个用于分类某些对象的模型。 我已经尝试使用django-mptt轻松地检索相关类别,现在我正在寻找不同的解决方案来找到最佳解决方案。 然而,我无法弄清楚Materialized Path、Adjacency List和Nested Set之间的主要区别。维基百科没有给我一个...

24得票4回答
如何使用SQL修复数据库中损坏的MPTT树(嵌套集)?

我有一个使用MySQL存储的100,000多个记录的MPTT树,使用lft、rght和parent_id列。现在左/右值已经损坏,但父ID仍然完好无损。在应用程序层修复它需要大量的查询。是否有一种好的方法将负担放在数据库上,并仅使用SQL重新计算左/右值呢? 为了澄清,我需要重新计算嵌套...

23得票6回答
从父/子节点的扁平列表构建层次结构对象

我有一个嵌套层级的项列表,并尝试将此列表解析为实际对象层次结构。我正在使用修改过的先序树遍历来存储/遍历此列表,因此我拥有包括所有子节点按其"left"值排序的子集树。 例如,给定以下树: Item A Item A.1 Item A.2 Item A.2.2 Item B I...

17得票2回答
高效函数以检索MPTT查询集的祖先

有没有一种有效的算法来检索MPTT查询集的所有祖先?到目前为止,我能想到的最好的方法就是这样:def qs_ancestors(queryset): if isinstance(queryset, EmptyQuerySet): return queryset ...

15得票3回答
Django-mptt如何获取节点列表的子孙节点?

我正在尝试获取节点列表(一个 QuerySet)中所有节点的 descendants(include_self=True),而不仅仅是单个节点。这应该只需要一个 SQL 查询。 示例(实际上并不能正常工作):some_nodes = Node.objects.filter( ...some_...

14得票2回答
在SQL中管理层次结构:MPTT/嵌套集合 vs 邻接表 vs 存储路径

最近我一直在思考如何在 SQL 中处理层次结构。由于邻接列表的限制和 MPTT/嵌套集合的复杂性,我开始考虑仅存储键路径,作为一个简单的 node_key/node_key/... 字符串。我决定总结三种技术的优缺点: 创建/删除/移动节点所需调用的次数: 邻接列表 = 1 MPTT = 3...

13得票3回答
如何使用Django mptt查询一个节点所有子节点的对象?

我正在尝试使用django-mppt获取给定节点的所有子节点的对象。 我设计了如下的模型,相同缩进级别的类别(节点)定义为兄弟,内部缩进为子节点。标记有类别的对象显示在该类别(节点)下方。对象以-符号开头。沿着类别(节点)的数字是其ID。 所有节点都是具有给定id的Category类的实例...

10得票1回答
如何使用Django prefetch_related预取MPTT树中子节点的父节点?

比如说,我有一个产品实例。该产品实例与第四级子类别相关联。如果我只想获取根类别和第四级子类别,则下面的查询足以使用最少的数据库查询来提取数据:Product.objects.filter(active=True).prefetch_related('category__root', ...

10得票1回答
使用修改的先序树遍历实现Rails ACL

是否有一个Rails ACL插件/宝石可以使用MPTT(修改先序树遍历)技术来管理权限? 我正在寻找ACL,它将允许我创建角色,将用户分配给一个或多个角色,在角色级别和用户级别设置权限。 目前我们使用CakePHP,并且内置的ACL是使用Tree行为(即MPTT)构建的。我已经了解到Rai...

8得票2回答
Django MPTT Postgres更新查询运行缓慢

我在一个模型中使用mptt来管理标签系统(每个标签都有一个可选的TreeForeignKey到“父”标签) 每当我需要保存标签模型时,以下查询运行异常缓慢(超过45秒) UPDATE "taxonomy_taxonomy" SET "tree_id" = ("taxonomy_taxon...