django-mptt деревоподібний select

django-mptt дуже чудовий модуль,але при автоматичному генеруванні адмін-панелі в полі select не вистачає деревоподібності, яке відобразило б реальну структуру

Це можна реалізувати за допомогою метода formfield_for_dbfield:


import mptt
from django.db import models

class Item(models.Model):
    name = models.CharField(max_length=255)
    category = models.ForeignKey('Category')

class Category(models.Model):
    title = models.CharField(max_length=255)
    parent = models.ForeignKey('self', null=True, blank=True, 
                                              related_name='children')

    class Meta:
        ordering = ('tree_id','level')

mptt.register(Category, order_insertion_by=['title'])


from django.contrib import admin
from mptt.forms import TreeNodeChoiceField

class ItemAdmin(admin.ModelAdmin):
    fieldsets = (
                 (None, {'fields':
                     (
                         'name',
                         'category',
                         )
                     }
                     ),
                    )

    def formfield_for_dbfield(self, db_field, **kwargs):
        if db_field.name == 'category':
            field = TreeNodeChoiceField(
                                        queryset=Category.objects.all()
                                                )
        else:
            field = super(ItemAdmin,self).formfield_for_dbfield(
                                                  db_field,**kwargs)
        return field

admin.site.register(Item, ItemAdmin)




coded by nessus