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)
Читайте також:
- Django yandex and google maps integration
- django-stdimage traceback "The '%s' attribute has no file associated with it"
- django postgresql та SCHEMA для таблиць
- django custom admin
- Django admin filter by ranges of dates with calendar
- Retrieving elements in a specific order in django
- {% TREE %}: Дерева в django-шаблонах
- Ordering related objects in Django
- Django defer, only
- Django admin filter by ranges of ages