我有带有以下字段的注释表。在这里,第一行表示数据库中的第三条评论属于帖子1。第二行和第三行意味着数据库中的第三条评论和第四评论属于帖子1,它们也是对第二条评论的答复,依此类推。
id post_id comment_id date
2 1 ...
3 1 2 ...
4 1 2 ...
5 1 ...
6 1 5 ...
我想按查询进行django分组,这样, 获取帖子1的所有评论,并按评论的回复将其分组。所以我希望有这样的团体
group1: comment2: comment3,4
group2: comment5: comment6
还应按日期字段对组查询进行排序。我该怎么办?
答案 0 :(得分:0)
给出Comment
的以下声明:
class Comment(models.Model):
post = models.ForeignKey('Post', on_delete=models.CASCADE)
replying_to = models.ForeignKey('self', on_delete=models.SET_NULL)
date = models.DateField()
text = models.TextField(default='')
grouped_comments = Comment.objects.all().order_by('replying_to', 'date)
您说过要
获取帖子1的所有评论,并按照评论的回复将其分组
以上grouped_comments
返回所有按需要分组的注释。如果您只想对特定帖子发表评论,那么当然,只需对post
进行过滤即可(使用您自己的帖子选择标准-我已在下面用硬编码的id
了):
grouped_comments = Comment.objects.filter(post__id=1).order_by('replying_to', 'date)
但是,当您渲染上面的内容时,我认为您将无法做您想要的事情。您正在渲染一棵树,而我不知道使用查询集执行此操作的方法。您可能需要查看django-mptt。它有template tags for recursive rendering。