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

Django中current_company.game_set.all()关联Game模型的哪个字段?

Django反向关联:game_set对应哪个字段?

首先得说清楚:你的代码其实有个小问题——当同一个模型(Game)有多个关联指向另一个模型(Company)时,Django会要求你给至少一个字段指定related_name参数,不然会因为反向关联的名称冲突报错。比如你应该把publishers字段改成这样:

publishers = models.ManyToManyField(Company, related_name='published_games')

回到你的核心问题:如果暂时忽略这个冲突,current_company.game_set.all()只会返回该公司作为开发者(对应Game里的developer外键字段)的所有游戏,和publishers多对多字段完全没关系。

为什么是这样?

  • 对于ForeignKey类型的关联,Django会自动生成一个反向关联管理器,默认命名规则是[关联模型小写名]_set。这里Game的developer是指向Company的外键,所以Company实例的这个反向管理器就是game_set,专门用来拉取所有把当前公司设为开发者的游戏。
  • 而ManyToManyField反向关联的默认命名也是[关联模型小写名]_set,这就和ForeignKey的反向名称撞车了,所以Django不允许这种情况,必须手动给publishers字段加related_name(比如上面的published_games),这样你就能用current_company.published_games.all()来获取该公司作为发行商的游戏了。

总结一下正确的用法:

  • 获取公司开发的游戏:current_company.game_set.all()(对应developer字段)
  • 获取公司发行的游戏:current_company.published_games.all()(对应加了related_name的publishers字段)

内容的提问来源于stack exchange,提问作者Nurzhan Nogerbek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:59:32