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

如何编写Django ORM查询实现内连接并统计博客点赞数?

获取所有博客及其点赞数的Django ORM查询写法

与你提供的MySQL查询完全匹配的ORM写法

如果需要和你的INNER JOIN查询逻辑一致(仅返回存在点赞记录的博客),可以使用以下语句:

from django.db.models import Count

# 返回字典形式结果,字段与你的MySQL查询一一对应
posts_with_like_count = Post.objects.filter(likes__isnull=False).annotate(
    like_count=Count('likes__id')
).values(
    'id', 'title', 'description', 'content', 'owner', 'created_at', 'updated_at', 'status', 'like_count'
).distinct()

包含无点赞博客的写法(点赞数显示为0)

如果需要返回所有博客(包括未获得点赞的,此时点赞数为0),去掉过滤条件即可:

from django.db.models import Count

# 返回带有like_count属性的Post对象实例
posts = Post.objects.annotate(like_count=Count('likes__id'))

# 遍历示例
for post in posts:
    print(f"ID: {post.id}, 标题: {post.title}, 点赞数: {post.like_count}")

代码说明

  • annotate(like_count=Count('likes__id')):借助Post模型中PostLike外键的related_name='likes',统计每个博客对应的点赞记录数,将结果命名为like_count
  • values(...):指定返回的字段集合,与你MySQL查询的字段完全对应,最终返回字典格式的查询结果
  • 若不使用values(),会返回带有like_count属性的Post对象实例,可直接通过对象属性访问点赞数

内容的提问来源于stack exchange,提问作者akshay patil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 03:40:20