【问题标题】:Django - Optional recursive relationshipDjango - 可选的递归关系
【发布时间】:2012-01-27 12:26:44
【问题描述】:

我正在尝试使用 Django 创建递归关系,它为用户提供了一个类似文件夹的层次结构来放置资源。

实现这一目标的最佳方法是什么?

我知道我可以使用 treebeard 或 mptt 来创建一个嵌套集,但我已经读过对树结构进行更改(在这种情况下会发生很多事情)可能是一项非常密集的操作,因为很多字段必须更新。

另一方面,我可以将带有 ForeignKey 的文件夹模型设置为 self,但是如何管理没有外键值的顶级文件夹?如果我将此值设置为 NULL,Django 会抱怨吗?

任何建议表示赞赏。

谢谢。

【问题讨论】:

  • 外键可以定义为fk = models.ForeignKey('MyModel', null=True, blank=True),这样它就可以在数据库中为空。这是你的意思吗?
  • 是的,我不确定这是否会导致 Django 出现问题。谢谢。

标签: database django recursive-datastructures


【解决方案1】:

Treebeard 实际上支持三种不同的树实现,只需选择适合您需要的一种即可。

  • 邻接列表(快速写入以慢速读取为代价)
  • 物化路径(可能是在 SQL 中处理树的最快方式)
  • 嵌套集(非常高效的读取,但写入/删除操作的维护成本很高)

文档在这里:https://tabo.pe/projects/django-treebeard/docs/tip/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    • 2013-08-04
    • 2015-03-13
    • 1970-01-01
    • 2019-10-18
    • 2020-11-09
    • 2014-12-26
    相关资源
    最近更新 更多