如何按日获取最新Post并按PostLike点赞数降序排序
按日期+点赞数排序帖子实现方案
前置说明
假设Post为帖子主表,PostLike为点赞记录表,两者通过PostLike的post外键关联到Post表。
Django ORM实现代码
from django.db.models import Count, DateField, Cast # 核心查询逻辑 post_list = Post.objects.annotate( # 统计每个帖子的总点赞数 like_total = Count("postlike"), # 提取发布时间的日期部分,排除时分秒干扰,保证按自然天聚合 publish_date = Cast("publish_time", output_field=DateField()) ).order_by( # 第一排序规则:按发布日期倒序,越新的日期越靠前 "-publish_date", # 第二排序规则:同日期内按点赞数倒序,点赞越高越靠前 "-like_total" )
字段说明
publish_time为Post表存储发布时间的字段,可替换为你实际的字段名- 若Post表已单独存储date类型的发布日期字段,可直接去掉Cast逻辑,第一排序参数改为
-你的日期字段名即可
原生SQL实现参考
SELECT p.*, COUNT(pl.id) AS like_total, DATE(p.publish_time) AS publish_date FROM post p LEFT JOIN post_like pl ON p.id = pl.post_id GROUP BY p.id ORDER BY publish_date DESC, like_total DESC;
效果验证
上述代码可完全实现你预期的排序效果:
10-Post1-20likes (18 Nov)
9-Post2-0Likes (18 Nov)
8-Post3-20Likes (17 Nov)
7-Post4-10Likes (17 Nov)
6-Post5-50Likes (16 Nov)
5-Post6-5Likes (16 Nov)
内容的提问来源于stack exchange,提问作者KKumar Technologies
相关产品推荐
相关产品推荐

