如何编写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_countvalues(...):指定返回的字段集合,与你MySQL查询的字段完全对应,最终返回字典格式的查询结果- 若不使用
values(),会返回带有like_count属性的Post对象实例,可直接通过对象属性访问点赞数
内容的提问来源于stack exchange,提问作者akshay patil
相关产品推荐
相关产品推荐

