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

Par*_*and 5 python django tree mptt django-mptt

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

我的需求很简单:

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

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

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

Mar*_*vin 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