Representing hierarchical data with Django and MPTT
Apparently, you’ve got two options for managing hierarchical data in django – django-mptt and django-treebeard. I didn’t have any time to test both of them carefully, so I just played a bit with the first one (and with great results!). [p.s. the comparison table above is not mine, but I found it quite useful. Click on the image to find out how it was created… ]
I guess that the key feature I was looking for is the admin-integration. Trees must be displayed and edited properly in the admin… unfortunately both projects don’t provide that feature by default, but luckily for there are attempts (#1 and #2) to fix this issue.
In order to use MPTT with your models you just have to download it, add it to your ‘installed application’ settings and register the models you intend to use:
# A mimimal example usage of ``mptt.register`` is given below, where the # model being set up for MPTT is suitable for use with the default # arguments which specify fields and the tree manager attribute:: from django.db import models import mptt class Genre(models.Model): name = models.CharField(max_length=50, unique=True) parent = models.ForeignKey('self', null=True, blank=True, related_name='children') mptt.register(Genre, order_insertion_by=['name'])
Then, after installing the patches, create a tree-friendly admin by subclassing MpttModelAdmin (check out the docs for more info).
Here’s the result – not bad at all! I just had to install django-mptt and the patches needed for using the jquery nested-sortable library with the admin. I’ll be working more on this during the next days so probably I’ll be posting more stuff….
