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

如何在Django Rest Framework中获取关联表行数并序列化返回?

解决Django Rest Framework获取关联表行数的方案

嘿,刚好我之前也碰到过一模一样的需求——用Django Rest Framework配合MySQL,获取关联表的行数来统计文章点赞数,已经成功实现了,分享给你参考:

场景说明

我这边的数据库结构和你完全一致:

  • article表:包含字段articleNo(主键)、userkey、content、likeCount
  • like表:包含字段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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:24:11