Рекурсивное отображение дерева MPTT в шаблоне Django с несколькими моделями - PullRequest
0 голосов
/ 31 января 2019

Итак, я использую Django-mptt, чтобы установить древовидную структуру в моей базе данных, затем я хотел бы просмотреть дерево и отобразить объекты в виде структуры дерева html.Однако всякий раз, когда я использую в своем шаблоне вызов {% recursetree Architecture%}, он отображает только объекты Architecture.Я надеялся найти способ перебрать дерево, отображающее каждый узел.Любая помощь приветствуется.

models.py

from django.db import models
from mptt.models import MPTTModel, TreeForeignKey


class Architecture(MPTTModel):
    name = models.CharField(max_length=50, unique=True)
    parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='Children')

    class MPTTMeta:
        order_insertion_by = ['name']


class Vehicle(MPTTModel):
    name = models.CharField(max_length=50, unique=True)
    mass = models.IntegerField()
    parent = TreeForeignKey('Architecture', on_delete=models.CASCADE, null=True, blank=True, related_name='Systems')

    class MPTTMeta:
        order_insertion_by = ['name']


class System (MPTTModel):
    name = models.CharField(max_length=50, unique=True)
    mass = models.IntegerField()
    parent = TreeForeignKey('Vehicle', on_delete=models.CASCADE, null=True, blank=True, related_name='SubSystems')

    class MPTTMeta:
        order_insertion_by = ['name']


class SubSystem(MPTTModel):
    name = models.CharField(max_length=50, unique=True)
    mass = models.IntegerField()
    parent = TreeForeignKey('System', on_delete=models.CASCADE, null=True, blank=True)

    class MPTTMeta:
        order_insertion_by = ['name']


class Mission(MPTTModel):
    name = models.CharField(max_length=50, unique=True)
    parent = TreeForeignKey('Architecture', on_delete=models.CASCADE, null=True, blank=True, related_name='Events')

    class MPTTMeta:
        order_insertion_by = ['name']


class Event(MPTTModel):
    name = models.CharField(max_length=50, unique=True)
    parent = TreeForeignKey('Mission', on_delete=models.CASCADE, null=True, blank=True)

    class MPTTMeta:
        order_insertion_by = ['name']

views.py

from django.shortcuts import render
from dyreqt_UX.models import Architecture, SubSystem

from django.http import HttpResponse


def show_tree(request):
    return render(request, 'dyreqt_UX/tree.html', {'Architecture': Architecture.objects.all})

tree.html

{% load mptt_tags %}
 <ul class="root">
 {% recursetree Architecture %}
     <li>
         {{ node.name }}
         {% if not node.is_leaf_node %}
             <ul class="Children">
                 {{ Children }}
             </ul>
         {% endif %}
     </li>
 {% endrecursetree %}

...