Django分组依据和排序依据

时间:2019-08-24 13:49:45

标签: django django-queryset

我有带有以下字段的注释表。在这里,第一行表示数据库中的第三条评论属于帖子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

还应按日期字段对组查询进行排序。我该怎么办?

1 个答案:

答案 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