Question

I am trying to use Django to create a recursive relationship, which gives users a folder-like hierarchical structure in which to place resources.

What would be the best way to achieve this?

I know I could use treebeard or mptt to create a nested set but I have read that making changes to the tree structure (something that would be happening a lot in this case) can be quite an intensive operation as a lot of fields have to be updated.

On the other hand, I could folder model with a ForeignKey to self but how do I manage the top level folders with no foreign key value? Will Django complain if I just set this value to be NULL?

Any advice appreciated.

Thanks.

Was it helpful?

Solution

Treebeard actually supports three different tree implementations, just choose the one that will suite your needs.

  • Adjacency List (fast writes at the cost of slow reads)
  • Materialized Path (probably the fastest way of working with trees in SQL)
  • Nested Sets (very efficient reads at the cost of high maintenance on write/delete operations)

Docs are here: https://tabo.pe/projects/django-treebeard/docs/tip/

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top