Search code examples
pythondjangomptt

Django-mptt admin categories


In my Django project I have a model:

class Category(MPTTModel):
name = models.CharField(default='',
                        max_length=50,
                        verbose_name='Название')
slug = models.SlugField(default='')
parent = TreeForeignKey('self',
                        related_name='children',
                        null=True,
                        blank=True,
                        verbose_name='Родительская категория'
                        )
order = models.PositiveSmallIntegerField(blank=False,
                                         null=False,
                                         default=0,
                                         verbose_name='Порядок')
is_active = models.BooleanField(default=True,
                                db_index=True,
                                verbose_name='Отображать на сайте')

class Meta:
    verbose_name = 'Категория'
    verbose_name_plural = 'категории'

class MPTTMeta:
    order_insertion_by = ['order']

If I add the main categories first (one, two, three), and then add subcategories (four in one, five in two, six in three), I would like to see it in the admin panel like this:

-one
--four
-two
--five
-three
--six

But I have this ordering:

-one
-two
-three
--four
--five
--six

What am I doing wrong?


Solution

  • You need to register Category model with MPTTModelAdmin In your admin.py

    from django.contrib import admin
    from mptt.admin import MPTTModelAdmin
    from .models import Category
    
    admin.site.register(Category, MPTTModelAdmin)
    

    Reference: https://django-mptt.github.io/django-mptt/admin.html