Вы можете добавить свойство в модель с именем «ответы», и оно даст все ответы на эти комментарии.
class Comment(models.Model):
author = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
comment = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
parent = models.ForeignKey(
'self', related_name='reply', null=True, blank=True,
on_delete=models.CASCADE)
@property
def replies(self):
return Comment.objects.filter(parent_id=self.id)
Итак, давайте предположим, что у вас есть родительский комментарий, и вам нужны все ответы на этот комментарий
parent = Comment.objects.get(id=1)
# Replies on this comment is.
print(parent.replies) # It will have only one comment in array with id=9
Теперь, если вам нужны ответы на комментарии с id=9
parent.replies[0].replies # It will give comments with id 10 and 11
Обновление: если вам нужны все вложенные ответы напрямую, вы можете сделать аналогично Django -admin do во время удаление объекта. Сначала он показывает все затронутые объекты
from django.contrib.admin.utils
collector = NestedObjects(using='default')
collector.collect(parents)
print(collector.data[parents[0].__class__]) # It will print all nested objects comments.