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 и т.д. Что мы должны использовать?

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