The comparison sheet below compares django-mptt and django-treebeard, two Django applications that enable you to easily add support for hierarchical data store to your models.
django-treebeard has the advantage of offering multiple tree storage strategies, all neatly abstracted from using the same API.
However, I personally really prefer the approach taken by
django-mptt with respect to the way it keeps track of a node's parent: by means of a standard ForeignKey. This is less fragile, and by its smart usage of Django signals
django-mptt allows you to modify a node's parents from anywhere (including the admin interface) without having to resort to a custom API call.
My conclusion: if the Nested sets / Modified Preorder approach is applicable to your use case, I would opt for
|2009-07-01 (SVN)||2009-06-14 (SVN)|
|Supported tree types||django-mptt||django-treebeard|
|Nested sets / MP|
|Last update (SVN)||2009-07-01||2009-06-14|
|Official release (Date)||Jan. 16, 2008||Nov. 20, 2008|
|Official release (Version)||0.2.1||1.1|
|Reparenting||Via signals, automatically||Explicit API calls required|
|Forms support||(TreeNodeChoiceField, MoveNodeForm)|
|FIx/recompute existing tree|
|Parent is ForeignKey based||(Only for AL)|
|Model preparation||mptt.register(MyModel)||class MyModel(NS_Node)|
|Basic API feeling||my_instance.get_descendants()||my_instance.get_descendants()|