MPTT. Потому что:
1) Есть пакет django-mptt в котором уже всё есть
2) Почти все выборки, которые тебе придут в голову, делаются одним запросом.
MPTT — это расширение nested sets. Из минусов там всё то же, что и в nested sets — несоблюдение ссылочной целостности, тяжёлый инсерт