2010-04-23 49 views
5

我正在尋找一種在Django中存儲和使用分層(父/子)數據的好方法。我一直在使用django-mptt,但它似乎與我的大腦完全不兼容 - 我在非顯而易見的地方發現了非顯而易見的錯誤,主要是在樹中移動時:最終導致狀態不一致,節點和其父母將不同意他們的關係。在Python/Django中存儲分層(父/子)數據:MPTT替代方案?

我的需求很簡單:

  • 給出一個節點:
    • 找到它的根源
    • 找到它的祖先
    • 找到它的後代
  • 一棵樹:
    • 輕鬆移動節點(即。改變父)

我的樹木將短小(最多10K的節點超過20個級別,一般是多少小得多,說有1級或2級10個節點)。

我不得不認爲必須有一個更簡單的方法來在python/django中執行樹。還有其他方法能更好地保持一致性嗎?

+2

Django的MPTT是偉大的 - 只是看了一些丹尼爾·羅斯曼的答案在這裏(http://stackoverflow.com/questions/2324727/re-ordering-child-nodes- in-django-mptt/2326625#2326625)有助於移動節點。不要放棄! – 2010-04-23 15:56:53

+0

謝謝,這看起來也是我的問題的可能原因,但我不相信自己每次都會這麼做 - 看起來太容易錯過了。我會迴應你的評論:「對MPTT和樹木進入不良狀態的可能性仍然有點緊張」:-)我認爲你最終開心了嗎? – Parand 2010-04-23 16:00:06

回答

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

+1

爲了什麼值得我最終堅持使用mptt並解決問題,儘管我並不特別高興。樹幹看起來像一個很好的選擇,所以我接受了答案。 – Parand 2010-04-27 23:20:30