Django: Рекурсивно получить все дочерние и внучатые объекты
Существует модель под названием Comment со следующим рекурсивным отношением.
class Comment(models.Model):
video = models.ForeignKey(ProductVideo, on_delete=models.CASCADE)
text = models.TextField(max_length=1000)
commented_at = models.DateTimeField(default=timezone.now)
parent = models.ForeignKey(
"self",
blank=True,
null=True,
on_delete=models.CASCADE,
related_name="replies",
)
def __str__(self):
return f"{self.user}, {self.text[:10]}"
А дочерними элементами родительского комментария A являются B, C, D... и существует несколько уровней рекурсивных отношений.
.
└── A
├── B
│ └── C
├── D
│ └── E
│ └── F
├── G
└── H
└── I
└── J
└── K
Как я могу получить всех этих детей из объекта с именем A эффективно и с плоским результатом?
// Comment.objects.get(pk="A")
[
{"id": "A"},
{"id": "B"},
{"id": "C"},
{"id": "D"},
{"id": "E"},
{"id": "F"},
{"id": "G"},
{"id": "H"},
{"id": "I"},
{"id": "J"},
{"id": "K"},
]
Существуют различные django-mptt, django-cte и т.д. Что мы должны использовать?