【问题标题】:Porting and existing nested set hierarchy移植和现有的嵌套集层次结构
【发布时间】:2020-08-15 09:33:39
【问题描述】:

我有一个使用 PHP ORM 原则开发的嵌套集合类别表,我想将它移植到 Django 应用程序。

我开始将它移植到 django-treebeard,但我遇到了困难,我不确定它是否可以工作。 原表有需要的字段lft、rgt和depth,所以我添加了tree_id字段。

我还有一个外键到一个树/帐户的帐户。因此,该表包含多个不在公共根下的独立树,每棵树的 lft 和 depth 列从 1 开始。所以基本上表中的每个帐户都有一个嵌套集。

我可以将节点添加到树中,但是当我调用 get_last_child 方法时,我会从其他帐户获取节点。

有谁知道是否有一种方法可以使用 treebeard、mptt 或任何其他软件包而无需重新构建树?

【问题讨论】:

  • Q1:您是否使用现有的数据库架构并使用manage.py inspectdb 创建 Django 模型?
  • Q2:您的类别表的当前树表示是否包含对父节点的引用?然后可以使用 django-treebeard “修复”嵌套的集合树。
  • 对 q1 是的。我还必须创建并填充 tree_id 字段。
  • Q2:嵌套集没问题,实际上在mptt的实验中,我从嵌套集中重新创建了一个parent_Id字段。整个树集显示正常,我只是很难让管理员根据模型中的 account_id 在每个帐户上过滤到一个根。

标签: django hierarchical-data django-mptt django-treebeard


【解决方案1】:

我通过按 account_id 添加正确的 tree_id 作为序号取得了一些进展,这解决了一些问题,查询:

UPDATE category c,
(SELECT id, DENSE_RANK() OVER (ORDER BY account_id) AS  seq
FROM category ) tree_rank
SET c.tree_id = tree_rank.seq
WHERE c.id = tree_rank.id;

现在正试图让管理员工作。

【讨论】:

    猜你喜欢
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多