Получение иерархических данных

У меня есть таблица базы данных,

id name parent id
1 A None
2 B 1
3 C 2

Существует множество родителей (parent id none) с произвольным количеством детей и произвольной глубиной.

Я хочу написать запрос к базе данных Django (рекурсивные запросы к базе данных MySQL - не вариант), чтобы я мог вывести всю вложенную структуру вплоть до листового элемента, например, для заданного id. Какой лучший способ достичь этого?

A
--B
----C
----D
--P
----Q

Единственное решение, которое я смог придумать, это первоначальный запрос к базе данных, как table.Object.filter(Q(id=id) | Q(parent_id=id)), чтобы получить родителя и его детей. Итерация по дочерним элементам для перехода к методу глубокого первого поиска (DFS) и запрос к базе данных в методе DFS для вложенных дочерних элементов, пока он не дойдет до листового элемента.

Я пытаюсь выяснить, есть ли в Django дополнительные инструменты, которые могли бы каким-то образом получить всю иерархию с минимально возможным количеством запросов (в идеале с одним).

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