如何在Django Rest Framework中获取关联表行数并序列化返回?
解决Django Rest Framework获取关联表行数的方案
嘿,刚好我之前也碰到过一模一样的需求——用Django Rest Framework配合MySQL,获取关联表的行数来统计文章点赞数,已经成功实现了,分享给你参考:
场景说明
我这边的数据库结构和你完全一致:
article表:包含字段articleNo(主键)、userkey、content、likeCountlike表:包含字段articleNo(关联article表的外键)、userkey
需求就是统计指定articleNo(比如articleNo=1)对应的like表中的行数,也就是文章的点赞总数。
实现代码
我是通过在ModelSerializer里自定义字段,利用DRF的source参数直接关联到关联对象集的计数方法来实现的,代码如下:
class ArticleSerializer(serializers.ModelSerializer): # 动态计算关联like表的行数,设置为只读字段 likeCount = serializers.IntegerField(source='like_set.count', read_only=True) class Meta: model = Article fields = ('articleNo', 'userkey', 'content', 'likeCount') # 按需列出需要返回的字段
关键细节解释
source='like_set.count':这里的like_set是Django默认生成的反向关联名称(如果你的Like模型中外键字段没有设置related_name属性,就会默认使用模型名小写_set的格式)。count()是Django ORM提供的高效统计方法,会自动生成对应的SQL计数查询,不需要自己手动写原生SQL。read_only=True:因为likeCount是动态计算出来的结果,不需要接收前端传入的值,所以设置为只读字段,避免序列化时出现参数错误。
使用这个Serializer序列化Article对象时,likeCount字段就会自动返回该文章对应的like表行数,完美满足需求。
内容的提问来源于stack exchange,提问作者Hide
相关产品推荐
相关产品推荐

