I'm looking for a good way to store and use hierarchical (parent/child) data in Django. I've been using django-mptt, but it seems entirely incompatible with my brain - I end up with non-obvious bugs in non-obvious places, mostly when moving things around in the tree: I end up with inconsistent state, where a node and its parent will disagree on their relationship.
My needs are simple:
- Given a node:
- find its root
- find its ancestors
- find its descendants
- With a tree:
- easily move nodes (ie. change parent)
My trees will be smallish (at most 10k nodes over 20 levels, generally much much smaller, say 10 nodes with 1 or 2 levels).
I have to think there has t开发者_JS百科o be an easier way to do trees in python/django. Are there other approaches that do a better job of maintaining consistency?
django-treebeard is another option. It has great documentation. I believe it meets all of your above requirements and includes some functions for checking the tree for problems and fixing those problems in the tree.
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
精彩评论