NSProjectApril 30, 2022, 12:04 p.m.

Django MPTT вывод дерева категорий

Django

Здраствуйте похоже я так и не понял всю суть 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 и их кода. А то я понять не могу

We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.
1

И всё таки я решил эту проблему. Написав реальный такой костыль. Решив тем самым свою проблему.

Comments

Only authorized users can post comments.
Please, Log in or Sign up
Fornex

Let me recommend you a great European Fornex hosting.

Fornex has proven itself to be a stable host over the years.

For Django projects I recommend VPS hosting

Following the link you will receive a 5% discount on shared hosting services, dedicated servers, VPS and VPN

View Hosting
YL

C++ - Test 001. The first program and data types

  • Result:66points,
  • Rating points-1
k
  • korsar
  • Nov. 23, 2022, 8:57 a.m.

C++ - Test 005. Structures and Classes

  • Result:50points,
  • Rating points-4
TM

C++ - Тест 003. Условия и циклы

  • Result:78points,
  • Rating points2
Last comments
b

GameDev on Qt - Tutorial 5. The explosion of bullets using sprite images

Если вдруг кто-то прочитает.... Скачал проект, скомпилил, запустил. Всё красиво и объектно ориентировано, но вот FPS дико страдает, когда появляется 10+ врагов. Может есть какие-то надстрой…
  • juvf
  • Nov. 25, 2022, 12:14 a.m.

Qt/C++ - Lesson 051. QMediaPlayer – simple audio player

Добрый день. Подскажите, как можно перехватить в Qt или Qml уровень воспроизводимого звука? Т.е. требуется сделать виртуальный винтажный индикатор (стрелочный или светодиодный), который бы …
  • juvf
  • Nov. 3, 2022, 3:20 a.m.

QML - Lesson 007. ListView. Dynamic creation and deletion of elements

Добрый день. Очень полезная статья. Спасибо. Вопрос такой: 1) нужно "взять" кнопку 2 пальцем (прикаснулись пальцем к кнопке 2, держим, через 2-3 кнопка оторвалась от ListView) и пере…

PyQt5 - Lesson 007. Works with QML QtQuick (Signals and slots)

А можно ли из QML сделать привязку свойства к свойству пайтоновского объекта? Ну, т.е. , например, у нашего объекта Calculator обхвялем свойства sumresult и subresult c с декоратором @pyqtProp…
MA

Python Image Recognition with TensorFlow and Keras

А что собственно выводит программа, как вывести то что она смогла распознать?
Now discuss on the forum
AB

Sorting the added QML elements in the ListModel

I am writing an alarm clock in QML, I am required to sort the alarms in ascending order (depending on the date or time (if there are several alarms on the same day). I've done the sorting …
AM

Как добавить в скрипт размер каждого файла в Мб ?

IDLE (Python 3.10 64-bit) Win 10 Есть такой скрипт: Поиск перечня файлов в папке и запись списка: import ospath = 'E:\Мой Python\__Видеокурсы Python'rez = sorted(os.listdir(pa…
n
  • nkly
  • Oct. 18, 2022, 9:14 a.m.

Как сохранить данные древовидной модели на основе QStandardItemModel в файл

Вы меня неправильно поняли. Допустим я собираю кулинарные рецепты и один из них - рецепт супа Харчо. Структура файла данных такова: { node:Рецепт супа Харчо parent:Вкусные блюда, …

Вопрос по Qt Creator

Добрый день. Не знаю, подобную проблему я не решал.

Задать другой класс div-у

Добрый день. Попробуйте использовать Selenium. Это библиотека есть в виде Python модуля и она позволяет загружать страницу и манипулировать html элементами. Как я понимаю, в ней можно…
About
Services
© EVILEG 2015-2022
Recommend hosting TIMEWEB