Django, как отображать комментарии третьего уровня во вложенной системе комментариев

Я создаю вложенную систему комментариев Django. Идея очень проста: все подкомментарии, принадлежащие одному и тому же корневому комментарию, будут вложены в корневой комментарий, независимо от того, к какому уровню или слою относятся подкомментарии.

Root comment
  A reply to Root
  B reply to A
  C reply to B
  D reply to C
  E reply to A

модель.ру:

class Comment(models.Model):
    """

    评论表

    """
    nid = models.AutoField(primary_key=True)
    news = models.ForeignKey(verbose_name='评论文章', to='News',to_field='id',on_delete=models.CASCADE)
    user = models.ForeignKey(verbose_name='评论者', to='User',to_field='id',on_delete=models.CASCADE)
    content = models.CharField(verbose_name='评论内容', max_length=255)
    create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
    parent_comment = models.ForeignKey('self', null=True, on_delete=models.CASCADE)

    def __str__(self):
        return self.content

вид.py:

def newsDetailView(request, news_pk):
   ......other code......
    comments_list = Comment.objects.filter(news_id=news_pk).order_by('-nid')
    return render(request, "news/pages/index-inner.html", {
        'comments_list': comments_list,
    })

шаблон:

    {% for comment in comments_list %} 
    
    {% if comment.comment_set.all and not comment.parent_comment %}
            
    <div class='root-sub-group'>
    <div class="root-comment" >
    {{comment.content}}
    </div>
    
   {% for reply in comment.comment_set.all %}
    
    <div class="sub-comment">
    {{reply.content}}
    <div/>
    
    {% endfor %}
            
</div>
    
    {% endif %}
    
    
    <!--now if the comments doesn't has both sub comments and parent comment then it should be a single root comment-->
    
    {% if not comment.comment_set.all and not comment.parent_comment %}
    <div class="single-root" >
    {{comment.content}}
    </div>
    
    
    {% endif %}
    
    {% endfor %}
    

Моя проблема заключается в том, что комментарий отображается только на втором уровне, а третий уровень не отображается.

Root comment
  A reply to Root
  F reply to Root

любой друг может помочь? Я знаю, что это немного трудно. Спасибо!


person William    schedule 03.03.2021    source источник
comment
Вы ищете рекурсивный выбор данных. Посмотрите stackoverflow.com/questions /39511993/   -  person datosula    schedule 03.03.2021