@frilix
Иногда "творю"

Неверный вывод django mptt tree?

Проблема с выводом меняю с помощью django mptt. В админке вывод верный, что показано на рисунке ниже, но на сайте вывод не соответствует тому, что в админке.

Вывод на сайте
5a0d85a9ad040768330469.png

Вывод в админке:
5a0d85c494b2e733559031.png

Как видно, проблемы не только на верхнем уровне, но и ниже (фруктовницы и конфетницы в категории предметов интерьера)

Вывод происходит так:
{% recursetree menu %}
    <li>
        {% if node.level == 0  %}
            <a href="{{ node.get_absolute_url }}" title="{{ node.name }}" class="menu-item">{{ node.name }}</a>
        {% else %}
            <a href="{{ node.get_absolute_url }}" title="{{ node.name }}">{{ node.name }}</a>
        {% endif %}
        {% if not node.is_leaf_node %}
            {% if node.level < 1 %}
                <ul class="base-list">
                    {{ children }}
                </ul>       
            {% else %}
                <ul>
                    {{ children }}
                </ul>
            {% endif %}
        {% endif %}
    </li>
{% endrecursetree %}


Сама модель выглядит следующим образом:
class Category(CreationModificationDateMixin, MetaTagsMixin, MPTTModel):
    parent = TreeForeignKey(
        'self',
        null=True,
        blank=True,
        verbose_name='Родительская категория',
        related_name='children'
    )

    name = models.CharField(
        'Название',
        max_length=100
    )

    slug = models.SlugField(
        'Название в URL',
        max_length=100,
    )

    available = models.BooleanField(
        'Отображать на сайте?',
        default=True
    )

    image = models.ImageField(
        'Загрузить изображение',
        upload_to=RandomFileName('images/categories'),
        blank=True
    )

    description = models.TextField(
        'Описание',
        blank=True,
        null=True
    )

    position = models.PositiveIntegerField(
        'Позиция при выводе',
        default=0
    )

    # Managers
    objects = models.Manager()
    accessable = AccessableManager()
    tree = TreeManager()

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

    class MPTTMeta:
        order_insertion_by = ['position', 'name']

    def __str__(self):
        return "{}".format(self.name)

    def get_absolute_url(self):
        return reverse('category:category', kwargs={'slug': self.slug, 'id': self.id})


При помощи менеджера tree использовал функцию rebuild, но все только ломалось и возникала ошибка с уровнями вложенности.

Можно как-то решить данную проблему?
  • Вопрос задан
  • 635 просмотров
Пригласить эксперта
Ответы на вопрос 1
@jenia0jenia
MPTTModel должна быть первым в списке родительских классов, насколько я помню
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы