Есть коментарии
class Comment(models.Model):
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
parent = models.ForeignKey('self', default=0, blank=True, null=True, related_name = 'parent_comment')
user = models.ForeignKey(User)
date = models.DateTimeField(auto_now=True)
content = models.TextField()
param = models.PositiveIntegerField(default=0, blank=True, null=True)
выбираю так
type = ContentType.objects.get_for_model(topics[0])
comments_list = Comment.objects.filter(content_type=type, object_id=id, param=0).select_related('user')
comments = {}
for comment in comments_list:
comments[comment.id] = {'obj': comment, 'childs': []}
tree = {}
for comment_id in comments.keys():
if comments[comment_id]['obj'].parent_id:
comments[comments[comment_id]['obj'].parent_id]['childs'].append(comment)
else:
tree[comment_id] = comments[comment_id]
del comments
то есть на выходе я получаю дерево tree, где есть рекурсивное вложение комментариев.
как это в шаблоне вывести?) первый уровень без проблем
{% for key, comment in comments.items %}
{{ comment.obj.user.username }}
{{ comment.obj.date }}
{{ comment.obj.content }}
ответить
{% endfor %}
а как бы мне это всё вызывать внутри, рекурсивно? я там подписал в каком месте идёт вложенность