问题标签 [mptt]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4923 浏览

django - 如何使用 MPTT for django 获取所有孩子?

我正在尝试获取一个类别的所有孩子:

http://django-mptt.github.com/django-mptt/models.html#get-children

更新1:

现在我收到此错误:“get() 返回了多个类别 - 它返回 7!查找参数为 {}”

谢谢

0 投票
2 回答
3610 浏览

sql - 在 SQL 中管理层次结构:MPTT/嵌套集 vs 邻接列表 vs 存储路径

一段时间以来,我一直在思考如何最好地处理 SQL 中的层次结构。由于邻接列表的局限性和 MPTT/嵌套集的复杂性,我开始考虑简单地将关键路径存储为一个简单的node_key/node_key/...字符串。我决定整理一下这三种技术的优缺点:

创建/删除/移动节点所需的调用次数:

  • 邻接 = 1
  • MPTT = 3
  • Path = 1(将旧节点路径替换为包含该路径的所有节点的新节点路径)

获取树所需的调用次数:

  • 邻接 = [子级别数]
  • MPTT = 1
  • 路径 = 1

获取节点/祖先路径所需的调用次数:

  • 邻接 = [超层数]
  • MPTT = 1
  • 路径 = 0

获取子节点数量所需的调用次数:

  • 邻接 = [子级别数]
  • MPTT = 0(可以从右/左值计算)
  • 路径 = 1

获取节点深度所需的调用次数:

  • 邻接 = [超层数]
  • MPTT = 1
  • 路径 = 0

需要的数据库字段:

  • 邻接 = 1(父)
  • MPTT = 3(父、右、左)
  • 路径 = 1(路径)

结论

存储路径技术在每个用例中都使用与其他技术相同或更少的调用,除了一个。通过这种分析,存储路径显然是赢家。更不用说,它实现起来要简单得多,人类可读等等。

所以问题是,存储路径不应该被认为是比 MPTT 更强大的技术吗?为什么存储路径不是一种更常用的技术,为什么您不在给定实例中通过 MPTT 使用它们?

另外,如果您认为此分析不完整,请告诉我。

更新:

以下是 MPTT 可以开箱即用的至少 2 件存储路径解决方案无法做到的事情:

  1. 允许计算每个节点的子节点计数,而无需任何额外的查询(如上所述)。
  2. 对给定级别的节点施加命令。其他解决方案是无序的。
0 投票
3 回答
1739 浏览

sql - 如何在修改后的先序树遍历中更新节点

我正在使用 MPTT 存储层次结构。添加和删​​除的概念在这个Modified Preorder Tree Traversal链接中得到了很好的解释。

我们如何在 Modified preorder tree traversal 中更新特定节点及其关联的树?例如:- 如果我想在 TLC 下移动 TLA 及其层次结构。使用 sql 脚本我们怎么能做到这一点?

在此处输入图像描述

任何帮助表示赞赏。

谢谢!

0 投票
1 回答
294 浏览

php - 使用非标准元素嵌套的 PHP 解析大型 XML 文件(SAP 路线图文件)

问题背景:

我有一个包含大量目录、文件、附件和 JavaScript 的文件夹。有一个主核心文件由 ActiveX 处理以生成一个“JS 树”类型的结构,该结构在嵌套表之后由嵌套表组成。简而言之,这很糟糕。

我遇到的问题是将其加载到数据库中,以便他们可以将状态应用于相关内容。

解析 XML 文件对我来说不一定是个问题,但是让结构正确流动却是。该文件没有以逻辑方式嵌套,这有助于在数据库/文件系统中轻松创建结构。XML 文件由Structure节点组成,这些节点包含有关该节点的一些信息以及文件系统中的任何相关内容。

我正在考虑将其加载到 MPTT 类型的结构中,但是在逻辑上将各种节点解析为由子/父关系组成的内容是我的绊脚石。以下是此 XML 文件的示例:

当它被 ActiveX 解析时,结构(在左侧导航窗格中)像标准大纲或有序列表一样排列:

等等。据我所知,这些表示节或小节 (1.1.1.2) 的值存储在节点的WBS标签中。Structure我认为我需要做的就是将它们解析出来并据此创建结构。如何做到这一点是我难过的地方。

此外,还有一个Sequence节点用于存储有关它脱离其父元素的索引子元素的信息。

我想做的事

我想做的是创建一堆数据库条目(最好在 MPTT 中),以便我可以轻松生成导航树,然后我可以开始担心“抓取”所有单个文件,以便我可以将它们的内容存储在数据库也。不知何故,我需要解析 WBS 节点值以在表中创建它的“索引”。

我希望解决方案比我预期的更简单。建议,正确方向的刺激将不胜感激。

我计划在 CakePHP 中使用 TreeBehavior 来管理它,但我不一定必须使用它来处理文件。

0 投票
1 回答
1593 浏览

python - 标准ModelAdmin中的django-mptt嵌套下拉菜单?

我将django-mptt用于Category模型,它是模型的外键Project

使用设置Category管理员很容易MPTTModelAdmin,并带有一个用于选择parent类别的漂亮嵌套下拉列表:

现在我想Category在我的管理员中包含一个很好的嵌套下拉列表Project,但标准admin.ModelAdmin不包含此功能并且子类化MPTTModelAdmin似乎不起作用:

项目没有名为“父”的字段

是否可以在非 MPTT 管理工具中模仿嵌套下拉菜单?

0 投票
1 回答
560 浏览

django - django-mptt :过滤所有具有在线条目的类别

我将这个Django 博客应用程序类别系统传递给 django-mptt。

我遇到的问题是关于_get_online_category方法的。此方法允许我仅获取具有Entry.

我该如何修改它,以便我也将拥有具有条目的类别的类别?

例如 :

Spain > Malaga和马拉加Entry用以前的方法得到了一个,我只会得到,MalagaSpain我不想两者都有。

第二个问题:

如何从父类别中获取所有条目?

例如从西班牙获得马拉加的职位?

这将返回西班牙的空结果。

0 投票
2 回答
488 浏览

php - MPTT 树到菜单

我有 mptt 对象$pages 通过

它的结构看起来像http://pastebin.com/CSGenz7y

我需要渲染导航菜单。使用以下代码:

我得到以下输出: http: //pastebin.com/MDMM2FcD

但我需要所有孩子 ul li 都在父母 li 里面:http: //pastebin.com/JteBPGqb

我用了半天,一无所获,有什么想法吗?

0 投票
1 回答
577 浏览

django - MPTT - 如何将每个节点的额外数据传递给模板?

鉴于以下情况view

如何传递comments_extra_data_list给模板以便在 MPTT 树上显示每个节点的数据?

0 投票
1 回答
921 浏览

django - MPTT - 如何覆盖“tree_id”

我想覆盖 tree_id 字段如下:

鉴于:

在创建“事物”第一个父级时,我想使用首次保存对象时分配的 thing_id 来启动 tree_id。

接下来,对于稍后创建的“事物”对象,我想传递之前创建的第一个父对象的 thing_id。

即树上的所有节点都将具有第一个祖先的objectId(thing_id)作为tree_id。

是否可以?

创建“事物”对象时如何传递值?

编辑:

所以看来我需要的解决方案仅仅是: Thing.objects.get(pk=thing_id).get_descendants()

0 投票
0 回答
145 浏览

python - 使用 MPTT 的数据库驱动模板上下文:如何表示列表与字典?

我遇到过很多我想要一些数据库驱动的任意嵌套模板上下文的情况。此内容总是很简单,但结构差异很大。

过去,我为网站的一小部分创建模型,随着模型数量的增加,维护起来很快就变成了一场噩梦,我开始为每个可编辑内容的小区域重复自己。管理员对一个特定的部分充满了内联。

为了解决这个问题,我想创建一个简单的数据库驱动上下文模型。我可能会创建一个像 django's admin 这样的小框架来为给定目的生成默认结构。

我目前的模型基本上是这样的:

从这个模型中,我可以轻松地创建任意深度的 Python 字典。问题是如何最好地区分子节点的列表和字典:单个字典作为子节点,值列表作为子节点,或字典列表作为子节点。

孩子们被迫进入的额外type领域?

通过子键确定?

  • 如果所有孩子共享相同的密钥,则它是一个列表。忽略键。
  • 如果有一个+孩子,那就是一本字典。
  • 如果没有子节点,则为字符串。

有什么建议么?

PS:我不腌制的唯一原因是因为我正在使用管理员来处理编辑这些数据,而我还没有真正探索过替换FileField. 事实是我还没有深入研究存储。基本上我在这里的动机是快速创造一些有用的东西。如果我强制所有孩子成为字典项目并解决我们在使我们的网站管理员的随机区域可编辑时遇到的问题,该系统在大约 5 分钟内工作。