You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django如何按关联评论数量对Post文章进行排序并在首页展示

实现方案

你可以借助Django ORM的聚合查询功能实现按评论数排序,步骤如下:

  1. 首先导入聚合函数Count
from django.db.models import Count
  1. 对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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 00:51:02