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

Django中外键关联Flight与Airport创建实例触发ValueError

问题排查与解决:Django外键字段赋值错误

错误原因

Flight模型的origin和destination是ForeignKey类型字段,Django要求这类字段必须传入关联模型(Airport)的实例对象,或者该实例的主键ID(数字)。直接传入字符串"New York"不符合字段类型要求,因此触发ValueError。

解决方案

方法1:先查询Airport实例再创建Flight

先通过城市名/机场编码查询到对应的Airport对象,再传入Flight构造方法:

# 从flights.models导入模型
from flights.models import Airport, Flight

# 查询目标机场实例(建议用code查询,避免城市名重复)
ny_airport = Airport.objects.get(code="JFK")
london_airport = Airport.objects.get(code="LHR")

# 创建并保存Flight实例
f = Flight(origin=ny_airport, destination=london_airport, duration=818)
f.save()

方法2:直接使用主键ID赋值

从你的查询结果可知,New York机场的主键ID是1,London是2,Django允许通过字段名_id的形式直接传入主键值:

f = Flight(origin_id=1, destination_id=2, duration=818)
f.save()

注意事项

  • 使用get()查询时,如果找不到匹配记录会抛出DoesNotExist异常,建议用filter().first()做安全查询:
ny_airport = Airport.objects.filter(city="New York").first()
london_airport = Airport.objects.filter(city="London").first()

if ny_airport and london_airport:
    f = Flight(origin=ny_airport, destination=london_airport, duration=818)
    f.save()
  • 优先用机场编码(code)查询,因为城市名可能存在重复,编码更唯一。

内容的提问来源于stack exchange,提问作者Janardhan Reddy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 08:50:44