在Python/Django中存储层次(父子)数据:MPTT替代方案?
我在寻找一种好的方法来在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