Django: Цикл / итерация вложенного списка с несколькими подуровнями

Вот мои фрагменты:

models.py

    class Item(models.Model):
        name = models.CharField('Name', max_length=50, unique=True)
        toplevel = models.BooleanField('Top level item', default=False)
        order = models.IntegerField('Order number', blank=True, null=True) #only if top level is true, determines the top level order

            
    class Hierarchy(models.Model):
        mainitem = models.ForeignKey(Item, on_delete=models.CASCADE, related_name='mainitem')
        subitem = models.ForeignKey(Item, on_delete=models.CASCADE, related_name='subitem')
        order = models.IntegerField('Order number', default=0) #determines the order of the subitems under the mainitem

views.py

    def items_view(request, *args, **kwargs):

        items = Item.objects.all()
        toplevelitems = Item.objects.filter(toplevel=True)
        sublevelitems = Item.objects.filter(toplevel=False)

        context = {
            'items':items,
            'toplevelitems':toplevelitems,
            'sublevelitems':sublevelitems,
        }
        return render(request, "itemlist.html", context)

itemlist.html

    {% if items %}
            <ul class="list-group list-group-flush">
                {% for toplevelitem in toplevelitems %}
                <li class="list-group-item">{{ toplevelitem.order }} {{ toplevelitem.name }}</li>
                {% for sublevelitem in sublevelitems %}
                <ul class="list-group list-group-flush">
                    <li class="list-group-item">{{ sublevelitem.name }}</li>
                </ul>
                {% endfor %}
                {% endfor %} 
            </ul>  
    {% else %}
        <p>No created items</p>
    {% endif %}

Итак, я пытаюсь создать с их помощью иерархию элементов, которые будут отображаться для клиента в виде вложенного списка. Я не могу понять, как перебрать все уровни иерархии и поместить их под нужный верхний уровень. Вот что я хочу получить:

    Item 1 (top level item)
        Item 1.1 (sub level item)
            Item 1.1.1 (sub sub level item)
                Item 1.1.1.1 (sub sub level item)
                ...
                    item 1.....n (n sub level item) 
                    
        Item 1.2 (sub level item)
            Item 1.2.1 (sub sub level item)
                Item 1.2.1.1 (sub sub level item)
                ...
                    item 1.....n (n sub level item) 

    Item 2 (top level item)
        Item 2.1 (sub level item)
            Item 2.1.1 (sub sub level item)
                Item 2.1.1.1 (sub sub level item)

    and so on...

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

Я знаю, что цикл в html не делает ничего подобного, он только перечисляет все подпункты, не учитывая их место в иерархии. Что мне нужно изменить, возможно, в запросах и html, чтобы сделать то, что я хочу?

Вернуться на верх