Django MPTT вывод дерева категорий
Здраствуйте похоже я так и не понял всю суть Django-MPTT батарейки. Так как не могу решить простую задачу с выводом категорий. По этому обращаюсь к вам за помощью.
Начну с начала. Изначально я пытался сделать древовидную структуру просто в Django, но просидев до утра понял что оно того не стоит и удалил несколько строк кода.
Так как отображение мне нужно на всех страницах сайта то эту функцию я запихал в контекст.
Зарывшись в гугл и яндекс были найдены примитивные рецепты. В принципе документация на MPTT. Думаю вот оно то что искал ну и вот три дня мучаюсь с этими деревьями.
Код models.py:
class Category(MPTTModel): name = models.CharField('Category', max_length=50) slug = models.SlugField('Category Slug', max_length=50, unique=True) parent = TreeForeignKey('self', verbose_name='Parent Category', on_delete=models.PROTECT, db_index=True, null=True, blank=True, related_name='category_children') is_published = models.BooleanField(default=False) def __str__(self): return self.name class MPTTMeta: order_insertion_by = ['name'] class Meta: verbose_name = 'Category' verbose_name_plural = 'Categories'
Простенькая такая модель. И вот на основе её у меня не получается создать дерево примерно такого вида:
При написании своего костыля у меня получилось вот какое вот чудище:
{% for category in category_list %} {% if category.base == True %} <li class="side-nav-title side-nav-item"> {{ category.name }}</li> {% if category.category_children.count != 0 %} {% for catego in category.category_children.all %} <li class="side-nav-item"> {% if catego.category_children.count != 0 %} <a data-bs-toggle="collapse" href="#{{ catego.name }}" aria-expanded="false" aria-controls="sidebarTasks" class="side-nav-link"> <i class="uil-clipboard-alt"></i> <span> {{ catego.name }} </span> <span class="menu-arrow"></span> </a> <div class="collapse" id="{{ catego.name }}"> <ul class="side-nav-second-level"> {% for item in catego.category_children.all %} <li> <a href="apps-tasks.html">{{ item.name }}</a> </li> {% endfor %} </ul> </div> </li> {% else %} <a href="#" class="side-nav-link"><i class="uil-clipboard-alt"></i> <span> {{ catego.name }} </span></a> </li> {% endif %} {% endfor %} {% endif %} {% endif %} {% endfor %}
Нехватает рекурсии. Так вот и вопрос как это всё реализовать при помощи mptt django и их кода. А то я понять не могу
Вам це подобається? Поділіться в соціальних мережах!
- Останні коментарі
- AK24 квітня 2025 р. 12:04UPD: Переписал логику воспроизведения через стороннюю библиотеку BASS. Там выбрать можно
- AK01 квітня 2025 р. 11:41Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
- Тепер обговоріть на форумі
- DT14 квітня 2025 р. 15:38Всем привет! На Qt 6.8 MinGW пытаюсь сделать управление подключением WiFi из программы. Пока делаю поддержку Windows, но так же хочу в дальнейшем внедрить и поддержку Linux/MacOS. Для…
- f15 лютого 2025 р. 13:46Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
- Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
- Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
И всё таки я решил эту проблему. Написав реальный такой костыль. Решив тем самым свою проблему.