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

Django创建带ForeignKey外键的MLBGame模型对象失败如何解决

错误原因

你在给MLBGame的外键字段传值时,传入的是字符串类型的球队名team.name,但Django外键字段要求必须传入关联的模型实例,或使用字段名_id的格式传入关联表的主键值。

正确实现代码

方案1:直接传入TeamName实例

# 先查询对应球队实例,该写法本身没有问题,前提是TeamName表中存在name等于game.away_team的记录
team = TeamName.objects.get(name=game.away_team)

MLBGame.objects.update_or_create(
    gameID=gameID,
    defaults={
        "name": team, # 直接传入查询得到的TeamName实例即可
        # 其余字段参数
    }
)

方案2:传入关联表主键值

如果不想直接传递实例,也可以通过外键字段名加_id后缀的方式,直接传入TeamName的主键:

team = TeamName.objects.get(name=game.away_team)

MLBGame.objects.update_or_create(
    gameID=gameID,
    defaults={
        "name_id": team.pk,
        # 其余字段参数
    }
)

注意事项

  • 你当前用get查询TeamName实例的写法,如果对应球队不存在会直接抛出DoesNotExist异常,建议提前做兼容处理:
    team = TeamName.objects.filter(name=game.away_team).first()
    if not team:
        # 自定义不存在对应球队时的处理逻辑,例如先创建球队实例
        team = TeamName.objects.create(
            name=game.away_team,
            abbreviation="你的球队缩写",
            twitter_id=game.away_team
        )
    
  • 你当前外键字段取名为name非常容易和TeamName表自身的name字段混淆,建议修改为team或belong_team等语义更明确的名称,降低后续维护成本。

内容的提问来源于stack exchange,提问作者Ryan Thomas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:18:03