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

如何序列化带多对多关系的模型并返回关联用户列表

解决方案

self.likes.all() 返回的是Django ORM的QuerySet对象,不属于JSON可序列化的Python原生数据类型,你需要遍历QuerySet把其中的User实例转换成可序列化的结构即可,同时直接移除likes_number字段就行。

根据你需要返回的用户信息粒度,有两种常见写法:

  • 如果只需要返回点赞用户的用户名,直接用列表推导式提取字段即可,修改后的代码如下:
def serialize(self):
    return {
        'id': self.id,
        'author': self.author.username,
        'text': self.text,
        'timestamp': self.timestamp.strftime("%b %d %Y, %I:%M %p"),
        'likes': [user.username for user in self.likes.all()],
    }
  • 如果需要返回点赞用户的多个属性(比如用户ID、昵称、头像链接等),就在遍历的时候为每个用户生成对应的结构化字典:
def serialize(self):
    return {
        'id': self.id,
        'author': self.author.username,
        'text': self.text,
        'timestamp': self.timestamp.strftime("%b %d %Y, %I:%M %p"),
        'likes': [
            {
                "id": user.id,
                "username": user.username,
                # 此处按需添加你需要返回的User模型字段即可
            }
            for user in self.likes.all()
        ],
    }

优化提示:这种写法只需要一次查询就能拿到所有点赞用户数据,比你之前两次调用self.likes.all()的效率更高。如果后续需要用到点赞总数,直接对返回的likes列表取len()就能得到,不需要额外查询数据库。

内容的提问来源于stack exchange,提问作者Giuliano Mirabella

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:33:21