我有一个使用GenericForeignKey
的评论模型和一个帖子的模型。在
class Comment(models.Model):
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey()
text = models.TextField()
comments = generic.GenericRelation('self')
class Post(models.Model):
title = models.CharField(max_length=50)
text = models.TextField()
comments = generic.GenericRelation(Comment)
我可以得到所有属于一个帖子的评论模板
^{pr2}$但我需要评论其他评论。在
我可以通过
{% for comment in post.comments.all %}
{{ comment }}
{% for sub_comment in comment.comments.all %}
{{ sub_comment }}
{% endfor %}
{% endfor %}
这样我只能得到指定数量的级别。在
如何遍历属于该帖子的所有评论或属于该帖子的其他评论?在
您可以向models模块添加一个函数,该函数遍历注释树并按顺序生成每个注释,如下所示:
另外,请注意,
traverse_comment_tree
基本上是一个pre-order depth-first traversal(以Post
对象作为树根,因此它永远不会被“访问”,因为只需要Comment
对象)。在然后模板的工作方式如下:
^{pr2}$然后,应遍历所有注释并以适当的顺序输出(即,在下一个顶级注释之前输出一个顶级注释的所有子体)。下一步是实现一种方法,让模板知道它所处的注释的“级别”。在
当然,这种方法(每个注释都有一个QuerySet调用)效率低下;但希望它能帮助您朝着正确的方向前进。在
我闻到了树的结构。
在Django中可以使用:django-mptt
它将几个列添加到表中,并将a lot usefull stuff作为树结构使用模型。在
它声称非常有效
相关问题 更多 >
编程相关推荐