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

时间:2010-04-23 15:37:48

标签: python django tree mptt django-mptt

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

我的需求很简单:

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

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

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

1 个答案:

答案 0 :(得分:3)

django-treebeard是另一种选择。它有很棒的文档。我相信它符合您的所有上述要求,并包括一些功能,用于检查树中的问题并在树中修复这些问题。

Node.find_problems() https://tabo.pe/projects/django-treebeard/docs/1.60/api.html#treebeard.models.Node.find_problems

Node.fix_tree() https://tabo.pe/projects/django-treebeard/docs/1.60/api.html#treebeard.models.Node.fix_tree