Django如何按关联评论数量对Post文章进行排序并在首页展示
实现方案
你可以借助Django ORM的聚合查询功能实现按评论数排序,步骤如下:
- 首先导入聚合函数
Count
from django.db.models import Count
- 对Post模型的查询集添加聚合字段,再按该字段排序
你当前的模型没有给外键设置related_name,所以反向关联名默认是comment_set,查询代码如下:
# 按评论数降序排列,评论越多越靠前 post_list = Post.objects.annotate( comment_count=Count('comment_set') ).order_by('-comment_count')
如果之后你给Comment的post外键自定义了related_name,比如:
class Comment(models.Model): post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='comments') # 其余字段不变
那查询代码可以改成更易读的写法:
post_list = Post.objects.annotate( comment_count=Count('comments') ).order_by('-comment_count')
说明
annotate方法会给每个Post实例新增一个comment_count属性,存储对应文章的评论总数,没有评论的文章该属性值为0,也会正常参与排序order_by参数里的减号代表降序排列,如果需要按评论数从少到多升序排列,去掉减号即可- 你可以直接把上述查询得到的
post_list传给首页模板,遍历渲染即可
内容的提问来源于stack exchange,提问作者Praveen Kumar
相关产品推荐
相关产品推荐

