问题标签 [django-treebeard]
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.
django - 使用 django-treebeard 建模多态树
我似乎找不到将各种多态类型的节点添加到同一棵树的方法。基本上,我想我想要一棵树,其节点要么是 Company 要么是 Region,两者都继承自 HierarchyNode,而 HierarchyNode 继承自 MP_Node
添加公司根节点很简单
但我似乎无法弄清楚如何将区域添加为c1
有没有办法做到这一点?API 是否不允许这样做,因为这是一个坏主意?有没有更合适的方法来模拟这个概念?或者,我想我可以有一个 HierarchyNodes 树,它与 Company/Region 类型具有一对一的关系。
python - 如何使用 django-treebeard 构建站点地图?
我已经设置了一个 django-treebeard 模型,它有子节点,什么没有。我现在如何在我的模板中显示它?这就是我到目前为止所拥有的。
我的模型:
我的观点:
我的模板:
这现在正在做什么,显然只是列出节点及其子节点而没有任何缩进。如何在我的模板中像树一样列出它?
python - 如何使用 django-cms Python api 创建页面?
我正在尝试编写一个 CMS 内容迁移脚本,它将为 django-cms 创建我们的页面。然而,即使默认安装了 Django-cms,Django-treebeard 仍然会引发异常,我不清楚为什么。
例如,当执行此行时:
我的脚本总是在treebeard的mp_tree.py(v 4.1.0)中失败(第307-8行):
有没有人有一个关于如何使用 cms.api.create_page() 方法的非常简单的例子?
Pip freeze 显示这些版本:
wagtail - wagtail '具有此路径的页面已存在。' 尝试手动创建页面时出错
作为数据导入的一部分,我有一些代码可以创建自定义页面对象:
这有时会引发:
一些调试代码确实表明存在另一个具有相同路径的页面:
为什么会这样?
尝试手动增加竞争路径以设置新路径也不起作用:
有趣的是,如果我跳过这些异常并继续导入,当我打印出这些路径时,它们似乎遵循类似的模式:
这可能是相关的吗?
django - Django-taggit 与 Django-treebeard 或合适的分类应用程序
环境: Python 2.7.10 Django 1.11.3
问题 我需要一个分类系统而不仅仅是标签。例如:
- 艺术 > 数码插画
- 编程 > 网站 > 代码大战
- 编程 > 网站 > Hackerrank
- 编程 > 网站 > 代码战 > 街机 > 一级
- 编程 > 代码挑战
环顾四周,我在 StackOverflow 中找到了这篇文章,这让我看到了这篇博文。
这导致我得到以下代码:
楷模
行政
问题是当我去管理员添加分类时,我得到以下字段:
- 姓名
- 蛞蝓
- 小路
- 深度
- 数子
最后两个不是手动输入的,所以树胡子的文档说。
不要直接更改 path、depth 或 numchild 的值:改用其中一种包含的方法。将这些值视为只读。
我继续尝试自己输入它们,出于好奇/愚蠢,树坏了。所以我不得不使用这个 hack 来修复它:
感谢用户“jrief”的黑客攻击。
另一个问题是我无法再通过管理员访问我的Post模型。我收到以下错误:
/admin/main/post 处的 FieldDoesNotExist 帖子没有属性“content_object”
请记住,这是我的第一个 Django 项目和应用程序。感谢您可能有的任何想法或分类法的良好 django 应用程序,或关于如何实现我需要的分类法的想法。
python - Django 查询以迭代地使用另一个查询集值的输出
我有一个组织模型,对于每个组织,我必须找到它的父组织的 ID。
我可以使用这段代码获取单个组织的父组织的 ID,
但是我希望每个组织都相同(对于每个组织,我希望它是父 ID)。如果我在 for 循环中这样做,则应该生成 n 个数据库查询。有没有办法在单个数据库查询中获取输出?
models.py
django - django-treebeard物化路径节点的动态排序
我有一个基于django-oscar
(and ) 的项目,它使用该模块django-cms
在具有不同SITE_ID
s 的多个域上运行。django.contrib.sites
该项目已经富有成效,我不能再更改类别 slug - 我希望避免将整个代码切换到嵌套集树或相邻树 - 为了您更好地理解:初始要求不想要不同的类别排序对于每个域,所以我只使用 Oscars 默认类别实现。
但是由于 Oscars 类别模型/管理器基于物化路径树实现,因此我必须考虑与通常的 Django 更改默认排序方式的一些差异django-treebeard
。
给定模型中的这两个额外字段(继承自django-oscar
s AbstractCategory)
我不能简单地将排序添加到元类中,例如:
首先,它将忽略该指令,因为treebeard
sMP_NodeManager.get_queryset()
不尊重自定义排序 - 对于 MP_Tree 逻辑,它必须依赖于插入时生成的排序(存储在 中path
),因此这种方法将违背 MP_Tree 本身的目的。
我也看过node_order_by
- 但如文档中所述:
node_order_by
启用时节点的顺序不正确。在节点插入时强制执行排序,因此如果在node_order_by
插入节点后修改了一个属性,则树排序将不一致。
但同样在具有不同类别排序的多个域上,这是没有用的。我能想到的唯一方法是覆盖MP_NodeManager
类:
但是这种方法显然是错误的,因为 MP_Tree 依赖于path
排序来生成正确的树 - 我的想法是遍历所有条目,比较path
,忽略最后一部分并根据排序order_site_{id}
并将其重新转换为QuerySet
.
我什至不确定这是否可能,并且我想避免去那里,所以我的问题是:有没有办法在 ORM 语句链中反映这种逻辑,以便我可以继续使用本机QuerySet
?
python - 在尝试序列化模型的子节点和父节点时,我得到 RecursionError
我正在尝试制作一个支持任意数量回复的评论模型。我正在使用 Django Rest Framework,而对于评论树,我正在使用 django-treebeard。
这是我的模型代码:
这是我的观点,很简单:
这是我的序列化器:
当我在 ipython shell 中运行测试时,我收到一条错误消息,指出
RecursionError: maximum recursion depth exceeded while calling a Python object
它最终指向序列化程序中的这些行:
问题是,我如何摆脱这个错误?
编辑:我忘了说的是,当我尝试只包含子字段或父字段并评论另一个字段时,它会起作用。但是当我同时尝试它们时,它不起作用。
django-treebeard - 在 django-treebeard 中,如何为兄弟姐妹添加孩子
在我的项目中,我应该使用树结构。在看到 treebeard 的文档后,我认为它非常合适。感谢您提供清晰的文档。在文档中,提供了示例
在上面的代码中,如果我想为兄弟姐妹添加孩子(例如:硬盘),我该怎么做
django - 在保存之前检查 django-treebeard ORM 中的树修改
我想仔细检查我是否正确解释了django-treebeard文档的以下部分:
django-treebeard 使用 Django 原始 SQL 查询进行一些写入操作,原始查询不会更新 ORM 中的对象,因为它被绕过了。
正因为如此,如果您在内存中有一个节点并计划在修改树(添加/删除/移动节点)后使用它,则需要重新加载它。
以下是我的理解:
如果我从数据库中加载了一个节点并在内存中处理它,我必须在保存之前使用refresh_from_db()。此外,如果树在 refresh_from_db 和保存之间被修改,我应该将这两个调用包装在一个原子事务中。
这个对吗?