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

django - Django-mptt 和多个父母?

在这个问题上,我已经把头撞在桌子上几个星期了,所以我认为可能是时候寻求帮助了。

我正在尝试实现一个数据库结构,该结构具有装配部件的分层数据。我的主要问题在于试图将一个“子程序集”分配给另一个“程序集”/树。参考下面的示例树 - 我在创建和使用程序集 1 和 2 时没有问题。但是当我制作程序集 3 时,当我调用子程序集时,我得到多个对象返回错误(我理解基于我的方式尝试)。

这是我一直在尝试的模型:

所以基本上我正在创建非常基本的树并通过 Part FK 链接到更详细的数据。我需要能够查询任何程序集并查看它的后代 - 所以虽然我可以调用程序集 3,但我不能调用任何已经在多个树中的子项。

对于我正在做的事情,从树中的任何给定点开始,向下总是相同的,即 1.2 总是有一个 1.2.1 的孩子,但向上可以改变,即 1.2 可以有 1 的父母和/或 3。

问题是让 Assembly.parent 成为 ForeignKey 因为它将它限制为一个值。关于一些解决方案或尝试的事情有什么想法吗?

如果您想查看其他代码或提出问题,请告诉我。这似乎是一个难以解释清楚的话题!谢谢

- - 编辑 - -

我发现我需要一个有向无环图 (DAG) 模型。

我还没有具体的解决方案,但是当我弄清楚或提出 DAG 问题时,我会尝试在此处发布链接。


----编辑2----

django-treebeard-dag

django-dag

我发现了这两个非常小的项目。我最初使用的是“treebeard”版本,然后为我的项目切换到 django-dag。如有关于基本用法的问题,请随时 PM,我会看看是否可以提供帮助。

0 投票
3 回答
1542 浏览

django - 根据选定的父节点显示子节点

嗨,我一直在寻找,找不到这个问题的答案。我只有 3 个月的使用 python/django 的经验,所以请原谅我的虚拟问题!我使用 django mptt 来显示一个简单的嵌套集导航。

这很好用 - 但是我想只显示所选类别的孩子(基于 slug)而不是全部。有任何想法吗 ???


我终于这样做了:

在视图中

但这是一个黑客。有没有人有更好的主意?

0 投票
4 回答
3059 浏览

django - 为什么我在编辑模型实例后无法保存它们?

我有一个可以很好地实例化的模型,但是一旦创建,如果我尝试保存它,我会得到一个 IntegrityError ,说主键必须是唯一的。这是什么原因造成的?

还有其他从 Node 继承的模型,它们给了我同样的问题。

这是我的模型:

这是它生成的 SQL:

当我尝试保存预先存在的模型实例时会发生什么:

以下是运行的查询:

为什么在我重新保存已创建的实例时尝试插入 main_book?

0 投票
1 回答
371 浏览

django - 使用邮件标题信息在 django 中对电子邮件线程进行排序

我有一个存储电子邮件线程的 django 应用程序。当我从 mbox 解析原始电子邮件并将它们插入数据库时​​,我会包含电子邮件标头参数“message-id”和“in-reply-to”。message-id 是标识消息的唯一字符串,in-reply-to 标识给定消息响应的消息。

这是我的模型的消息部分:

目标是能够以类似于 gmail 的线程格式显示电子邮件对话。我打算只使用邮件标头中的 message-id(模型中的mesg_id)和回复中的(模型中的 in_reply_to)来跟踪邮件并进行线程处理。

在查看了 SO 和 google 之后,看起来我应该使用 django-treebeard 或 django-mptt 之类的库来执行此操作。当我查看这两个解决方案中的任何一个的文档时,看起来大多数模型都使用外键关系,这让我感到困惑。

鉴于上面的示例模型,我如何在我的应用程序中实现 django-treebeard 或 django-mptt?这可以使用 mesg_id 和 in_reply_to 字段吗?

0 投票
2 回答
3897 浏览

python - 检索 mptt 查询集祖先查询集的高效函数

有没有人有一个有效的算法来检索一个 mptt 查询集的所有祖先?到目前为止,我能想到的最好的事情是这样的:

这种方法有两个问题:

  1. 如果有不相邻的分支(即它实际上不起作用),它会失败
  2. 它的效率非常低,因为它最终number_of_trees*number_of_levels在最终查询中包含子句,这些子句会很快变得非常大

我愿意在其他地方缓存祖先,但我想不出一种有效的方法。我考虑添加一个以逗号分隔的祖先 id 列表的字段,然后在GROUP_CONCAT额外的内部执行一个(我在 MySQL 中),但我认为这可能会变得巨大/缓慢。

0 投票
2 回答
1722 浏览

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

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

0 投票
1 回答
1727 浏览

django - Django MPTT - 类别的绝对网址

我有以下树结构:

使用 django-mptt 我可以使用 1 个查询来显示此信息,这很棒,但是在尝试创建如下网址时:

它正在对我的树中的每个类别进行 SQL 查找,以获取父节点 slug(这是可以理解的。)这是我的代码:

MPTT 是否有任何功能可以让我创建一个 url slug 而不会在 SQL 上发疯?

0 投票
1 回答
1086 浏览

django - 扩展 Django FlatPages 以使用 MPTT

前言:我正在编写自己的 Page 应用程序,该应用程序使用 MPTT 和自定义页面模型。这对我有用,但 FlatPages 比我的自定义页面模型更精致,所以我倾向于扩展它。

这几乎可以工作,除了在我跑步时抛出错误python manage.py syncdb

错误:

如果有人能指出我正确的方向,我将不胜感激。谢谢!

0 投票
2 回答
1719 浏览

django - 如何在每次插入后构建 django-mptt 树而不重建?

我正在构建大型 mptt 树。我想插入所有节点,然后是重建整个树的启动方法:

如何避免在每次插入后重建树?

我在.save方法中只发现了 depracticed 关键字:

在早期版本中, MPTTModel.save() 有一个原始关键字参数。如果为 True,则 MPTT 字段在保存期间不会更新。这个(未记录的)参数现在已被删除。

0 投票
1 回答
1921 浏览

django - Django 多个缓存后端

我想在一个 django 项目中使用多个缓存引擎。在示例中,我使用 sorl.thumbnail,它生成了许多 sql 查询来获取/设置模型图像的缩略图。为了缓存这个查询,我使用 memcached 后端。但是,其他缓存停止工作,我的意思是模板缓存{% cache ... %},以及通过 API cache.get()、cache.set()。我想成为这样的人

}

如何在模板中使用“基于文件”的缓存?因为 {% cache %} 使用 memcached 后端,它会产生很多查询,尤其是使用树(django-mptt)