Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django: Best way for simple hierarchy?

I have this model:

class Category(models.Model):
    name = models.CharField()
    description = models.CharField(blank=True)
    parent = models.ForeignKey('self', blank=True, null=True)

I want Django to sort the categories with respect to their hierarchy, for example:

  • Parent 1
    • Child 1
  • Parent 2
    • Child 1

I did some research and found 2 apps, treebeard.al_tree and Django MPTT, both are powerful which may lead to lower performance or harder to maintain.

I will display the categories in website's sidebar and inside admin pages (includes ForeignKey in posts model), there will be very low additions/modifications/deletions to categories, mostly reading only which should have no big affect on performance.

Is there any other app which offers this and simpler than those above? Can I achieve this using Django without additional apps, using managers or something else?

like image 540
Someone Avatar asked Dec 18 '25 04:12

Someone


2 Answers

I do not see any disadvantes using an app like django-mptt. In fact the methods provided by it are optimized to give you a maximum in performance when doing queries with hierarchical structures. No reason for me to worry about maintainability and/or performance and it is quite easy to use!

like image 92
Bernhard Vallant Avatar answered Dec 20 '25 21:12

Bernhard Vallant


MPTT or treebeard may lead to lower performance? Nonsense. The whole point of these apps is that they provide highly optimised algorithms that massively increase performance. MPTT allows you to grab whole trees or sub-sections of them with a single database operation, which would otherwise need many separate calls.

like image 20
Daniel Roseman Avatar answered Dec 20 '25 21:12

Daniel Roseman