问题标签 [django-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 回答
3310 浏览

python - 在 Python/Django 中存储分层(父/子)数据:MPTT 替代方案?

我正在寻找一种在 Django 中存储和使用分层(父/子)数据的好方法。我一直在使用django-mptt,但它似乎与我的大脑完全不兼容 - 我最终在不明显的地方遇到不明显的错误,主要是在树中移动东西时:我最终状态不一致,其中节点和它的父节点会不同意他们的关系。

我的需求很简单:

  • 给定一个节点:
    • 找到它的根源
    • 找到它的祖先
    • 找到它的后代
  • 用一棵树:
    • 轻松移动节点(即更改父节点)

我的树会很小(最多 10k 个节点超过 20 个级别,通常要小得多,比如 10 个节点具有 1 个或 2 个级别)。

我不得不认为必须有一种更简单的方法在 python/django 中创建树。还有其他方法可以更好地保持一致性吗?

0 投票
3 回答
609 浏览

django - django-mptt 字段出现两次,破坏 SQL

我正在使用 django-mptt 来管理一个简单的 CMS,其模型名为Page,看起来像这样(最可能不相关的字段被删除):

删除的字段称为attachments, headline_image, nav_override, 和published

使用 SQLite 一切正常,但是当我使用 MySQL 并尝试使用管理员(或使用 ModelForms 和save()方法)添加页面时,我得到了这个:

其中生成的 SQL 是:

出于某种原因,我得到了 django-mptt 字段(lft、、rght和)两次。它在 SQLite 中工作大概是因为 SQLite 比 MySQL 更宽容地接受它。tree_idlevel

get_all_field_names()还显示了两次:

这大概就是 SQL 不好的原因。我能做什么会导致这些字段出现两次get_all_field_names()

0 投票
2 回答
2354 浏览

django - 覆盖使用 django-mptt 的模型的 save() 方法

我在我的项目中使用 django-mptt 已经有一段时间了,这太棒了。最近,我发现需要重写使用 mptt 的模型的 save() 方法,当我尝试保存该模型的新实例时出现错误:

我假设这是因为实例还没有被卡在树中,但我不确定如何解决这个问题。我在项目跟踪器上的一个类似问题上添加了关于它的评论,但我希望这里的某个人能够让我更快地走上正确的轨道。

这是追溯。

0 投票
2 回答
4123 浏览

python - django-mptt:如何成功移动节点

django-mptt 似乎决心要把我赶出我的脑海。我正在尝试做一些相对简单的事情:我要删除一个节点,并且需要对节点的孩子做一些合理的事情。即,我想将它们上移一级,以便它们是当前父母的父母的孩子。

也就是说,如果树看起来像:

我要删除父亲,并希望 C1 和 C2 成为爷爷的孩子。

这是我正在使用的代码:

所以我会打电话:

这有效 - 几乎。孩子们称他们的父母为爷爷:

爷爷在孩子中算C1和C2

然而,Root 不承认这些孩子。

我如何让孩子们移动并且他们的根不会被破坏?

0 投票
2 回答
424 浏览

django - django-mptt & django 1.2

来自 django-mptt 的主页

0.2.1 版本与 Django 1.0 及以上版本不兼容 - 请暂时使用 SVN 中继

我倾向于避免将主干用于即将上线的工作,但我有一份紧急工作。

它是否适用于 Django 1.2,(除了“hello world”等价物)有没有人有任何当前的经验/奇怪的错误可以分享等。

0 投票
2 回答
1326 浏览

django - Django:分层 URL

你如何处理 Django 中的分层 URL?有什么最佳实践吗?例如。如果我有一个类似的 URL /blog/category1/category2/myblogentry(使用例如 django-mptt),你会在进入之前做一些检查urls.py还是给出一个视图的整个路径,让它检查每个部分是否是一个有效的类别等?听起来并不那么难,但只是好奇是否有人可以推荐一些最佳实践或可以展示一些好的(通用)解决方案?

0 投票
1 回答
2268 浏览

django - 在 django mptt 完整树列表中包括外键计数?

我像这样吐出我的类别树:

但是,我还想<span class="count">13</span>为我的内部类别(可能从第 3 级开始?)生成每个类别关联的错误数量,因为我的错误可以关联多个类别。

我在想我的嵌套 for 循环中需要类似这个片段的东西,但我不太确定该怎么做:

这是我的模型供参考:

所以电流输出是:

和理想:

0 投票
1 回答
308 浏览

python - django-mptt 儿童选择适用于 localhost 但不适用于服务器

我在 localhost 和服务器上有相同的代码(感谢 mercurial),但它的工作方式有点不同。我想使用以下代码在模板中呈现类别及其子类别:

视图.py:

模板:

但是,这段代码在 localhost 上完美运行(子类别呈现正确) - 它在服务器上不起作用,并且{{ subcats|length }}返回 0。我比较了来自 MySQL 基础上 localhost 和服务器上的值 - 它们是正确的继承应该起作用。最有趣的是,相同的查询在服务器上的manage.py shell中完美运行。

它有什么问题?

0 投票
1 回答
1561 浏览

django - 使用 django-mptt 复制 FeinCMS 页面树更改子顺序

我正在尝试制作 FeinCMS 页面树的副本,该页面树使用 django-mptt 进行管理。我写了这个函数:

并使用

它通常可以工作,但是当我的页面树看起来像这样时:

结果是这样的:

从我逐步浏览 mptt 代码开始,魔法似乎发生在 mptt/managers.py/_inter_tree_move_and_close_gap() 中,由于某种原因,孙子的“lft”值发生了变化。在移动之前它们是C = 3,D = 5,之后它们是C = 5,D = 3。

这解释了为什么 D 在 C 之前排序,但我不知道为什么这些值会被切换。有什么想法吗?

0 投票
3 回答
1741 浏览

python - Django:简单层次结构的最佳方式?

我有这个模型:

我希望 Django 根据其层次结构对类别进行排序,例如:

  • 家长 1
    • 孩子 1
  • 家长 2
    • 孩子 1

我做了一些研究,发现了 2 个应用程序,treebeard.al_tree 和 Django MPTT,它们都很强大,可能会导致性能降低或难以维护。

我将在网站的侧边栏和管理页面中显示类别(包括帖子模型中的 ForeignKey),对类别的添加/修改/删除将非常少,主要是只读,对性能没有太大影响。

是否有任何其他应用程序提供此功能并且比上述应用程序更简单?我可以使用 Django 实现这一点而无需额外的应用程序,使用管理器或其他东西吗?