RSS michelepasin.org / code, music, words

Words / blog / 6 August 2009

Representing hierarchical data with Django and MPTT


Apparently, you've got two options for managing hierarchical data in django - django-mptt and django-treebeard.

Picture 3

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....

Michele Pasin. Representing hierarchical data with Django and MPTT. Blog post on www.michelepasin.org. Published on Aug. 6, 2009.

2026

2025

2023

2021

2020

2019

2018

2017

2016

2015

2014

2013

2012

2011

2010

2009

2008

2007

2006