问题标签 [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 投票
0 回答
171 浏览

python - 在 python 中预先计算 lft/rgt

我们有几个带有lft/的 MySQL 表rgt(嵌套集/修改的前序树遍历),parent_id以及level其中的列。每天晚上,我们都会擦除表格并从客户那里获取新数据。由于我们从客户端数据库中获取数据的方式,我们可以轻松计算parent_idand level,但是lgtandrgt是在我们与存储过程同步之后设置的。到目前为止,我们只需要处理非常小的结果集,不超过 30,000 行。但是现在我们正在查看超过 200,000 个 em,而且这需要很长时间。我已经同步运行了一个多小时,但仍然没有完成,通常需要大约 5-15 分钟(我也觉得有点多)。

在存储到数据库之前是否有另一种方法来计算lft/ ?rgt(最好用python)

我们同步的一些伪代码:

0 投票
1 回答
209 浏览

php - PHP将多维数组转换为修改的前序遍历树

我有一个多维数组,我想将其转换为修改后的预序遍历树:

我尝试过遍历嵌套数组或使用迭代器,但我只是没有成功获得正确的界限。

在这里,我有什么要被左约束的,我如何得到正确的?

0 投票
1 回答
789 浏览

python - 为什么模型混合会破坏 django-mptt 外键?

我正在修改基于 django-mptt 的第三方 Django 应用程序。我正在尝试将一个巨大的模型重构为一个基类和一组 mixin。一切似乎都很好,然而......

  1. 如果ModelMixin继承自object, South 看不到 mixin 中声明的任何字段。
  2. 如果ModelMixin继承自mptt.models.MPTTModel,则 django-mptt 添加到 MPTT 感知模型的额外字段将添加两次;这django-mptt不喜欢,即使 mixin 是抽象的。
  3. 最有趣的是,如果ModelMixin继承自django.db.models.Model,当我尝试向该模型引入外键时,我会得到这个该死的奇怪错误:

追溯:

0 投票
0 回答
1060 浏览

django - django-mptt order_insertion_by 和树重建

我开始使用 ' order_insertion_by' 来更改 django-mptt 中的默认排序。

到目前为止,我还没有在本地发现问题,但我的测试失败了。

背景: 我有测试夹具,它在树结构和两棵树中创建了大约 10 个对象。

order_insertion_by在模型中添加了“”。当我运行测试时,它失败了,因为树结构现在一团糟。

但是,如果我在重新加载测试装置后进行树重建,树结构就可以了。

这是夹具tests.py

并在models.py

这引发了几个问题:

  1. 我认为' order_insertion_by '在创建/更新对象时强制更新/重建树。但这并不一致,您必须在模型创建/更新后重新构建,以确保树处于良好状态。是这样吗?

  2. 在我的测试用例中,为什么初始树一团糟?我只创建了大约 10 个具有树结构的对象。

0 投票
0 回答
168 浏览

python - django-mptt 可以渲染具有来自节点子集的祖先和后代的部分树吗?

django-mptt 可以从节点列表构造部分树吗?

鉴于这棵完整的树:

并且只给定一个节点子集,假设我只能["Big-rig", "Car (automatic)"]有效地渲染这棵树:

?

我知道我可以下降节点,通过它们的子节点向下移动。但是我也可以用祖先渲染这棵部分树吗?

0 投票
0 回答
326 浏览

django - django MPTT模型和应用夹具

我正在使用 django MPTT 模型。

我将 MPTT 模型子类化,然后尝试使用 JSON 中提供的 initial_data 将夹具添加到自定义模型。

父 TreeForeignKey 是可选的(空白=True,null=True)

当我从 initial_data 应用 JSON 夹具时,它要求提供字段“lft”、“rght”、“tree_id”、“level”。

...运行 python manage.py syncdb 时

这些是来自 MPTT 的字段。

有没有办法从夹具数据中排除或解决这个问题?

谢谢

0 投票
0 回答
204 浏览

python - 如何控制 Django 查询中的连接条件?或者如何根据 django-mptt 祖先字段的值过滤查询?

我正在使用 django-mppt 来允许项目模型在我的应用程序中有父项目(并且任务属于项目)。每个项目都有一个状态,我正在尝试查询所有处于活动状态且其祖先也处于活动状态的项目(最终,查询属于这些项目的任务)。

楷模

原始 SQL

我已经设法构建了一个原始 SQL 查询,它可以让我获得所有处于活动状态且其祖先也都处于活动状态的项目。我通过为任何不活动的祖先构造一个 LEFT OUTER JOIN 来做到这一点,并检查结果是否为 NULL,即不存在不活动的祖先(不确定这是否是最好的方法)。

Django 查询?

是否可以将这个——或功能上等价的东西——写成 Django 查询?

我知道我可以使用Q 对象进行复杂的查找,并且我已经查看了F() 表达式......但是 F() 表达式似乎没有帮助,因为无法通过项目的外键访问项目的祖先,而是根据我对 MPTT 的理解,需要一个 JOIN 或带有基于 和 字段的过滤器的tree_idlft查询rght

我想出了这个 Django 片段,假设我已经有一个 Project p 作为对象,我可以为该特定对象的任何非活动祖先构造一个 Django 查询:

但是然后我需要已经从数据库中检索到项目来检查它的祖先......

如何在连接或子查询中使用该片段作为过滤器的一部分,以便我可以在单个查询中检索所有相关项目(即活动且没有不活动的祖先),就像上面的原始 SQL 一样?

(那么,我如何查询属于没有非活动祖先的活动项目的所有任务?)

0 投票
0 回答
128 浏览

python - 如何使用 TAL 和嵌套集列表在 Chameleon 模板中创建树(修改的先序树遍历)

我正在使用嵌套集层次结构或修改的预序树遍历 (MPTT) 算法,如此所述,我很难理解如何将深度和类别名称转换为 Chameleon 模板以显示嵌套树使用<ul><li>

我有一个dict包含所有类别的深度和类别名称信息,如下所示:

改编这个source,在 Python 中打印这些信息的方式是:

我想做的是将这个 Python 代码翻译成可以在 Chameleon 模板中使用的东西,使用tal.

我见过的最接近的答案是使用 Chameleon ZPT 渲染具有任意深度的嵌套元素,但它需要每个节点的子节点,这似乎不是正确的解决方案。

所以,我的问题是:如何在 Chameleon 模板中实现上面的 Python 代码?我真的很感激我能得到的任何帮助。到目前为止,我已经尝试过:

但是,current_depth始终定义为 -1。如果从上面的模板代码中看不出来,我对它很陌生,所以任何帮助都将不胜感激!谢谢。

0 投票
1 回答
206 浏览

python - Django mptt 加入/合并模型

我有这两个模型:

我一直在尝试和尝试,但我找不到任何解决方案。

无论如何将这两个模型合并在一个树形图中?这个想法是一个文件夹可以包含一个文件夹或一个页面

我正在使用 django 1.6.5 和 python3

0 投票
1 回答
2534 浏览

django - 在 django-mptt 中获取父 ID

我正在使用django-mpttjquery-treetable

我正在打印我的对象:

在元素jquery-treetable<tr>应该有一些属性来标识哪些行是哪些行的子行。

它需要具有以下设置

但我似乎无法找到正确的模板变量来正确识别孩子。我只发现node.id, node.tree_id, node.level, node.lft, 和node.rght.