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

6 投票
1 回答
3598 浏览
提问于 2025-04-15 21:57

我在寻找一种好的方法来在Django中存储和使用层级(父子)数据。我之前使用过django-mptt,但是感觉它和我的思维方式完全不兼容——我总是在一些不明显的地方遇到bug,尤其是在移动树中的节点时:我会遇到不一致的状态,比如一个节点和它的父节点之间的关系会出现矛盾。

我的需求很简单:

  • 给定一个节点:
    • 找到它的根节点
    • 找到它的祖先节点
    • 找到它的后代节点
  • 对于一棵树:
    • 可以轻松移动节点(也就是改变父节点)

我的树结构会比较小(最多1万个节点,20层,通常会小得多,比如10个节点,1到2层)。

我觉得在python/django中应该有更简单的方法来处理树结构。有没有其他方法能更好地保持一致性呢?

1 个回答

4

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

撰写回答