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 и их кода. А то я понять не могу
Do you like it? Share on social networks!
- Last comments
- VPMarch 9, 2025, 4:14 p.m.Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
- ИМNov. 22, 2024, 9:51 p.m.Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
- Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
- Now discuss on the forum
- fFeb. 15, 2025, 1:46 p.m.Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
- Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
- Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
- Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.
И всё таки я решил эту проблему. Написав реальный такой костыль. Решив тем самым свою проблему.