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

如何用Django ORM实现Ship、Address、Photos三表关联查询?

Django ORM 三表关联查询方案

由于Ship与Photos是一对多关系(单艘船对应多张图片),需结合select_related和prefetch_related实现一次查询拉取所有关联数据:

核心查询代码

# 同时关联Address和预取Photos数据
ships_queryset = Ship.objects.select_related('address').prefetch_related('photoship')

数据遍历与展示

获取查询集后,可直接遍历获取所有关联数据,无额外数据库查询:

for ship in ships_queryset:
    # 获取关联的地址信息
    ship_address = ship.address
    # 获取该船的所有图片
    ship_photos = ship.photoship.all()
    # 此处可将ship、ship_address、ship_photos的数据渲染到表格中

关键逻辑说明

  • select_related('address'):处理Ship到Address的多对一正向关联,通过SQL JOIN一次性拉取地址数据,避免N+1查询。
  • prefetch_related('photoship'):处理Ship到Photos的一对多反向关联(对应Photos模型中设置的related_name="photoship"),先批量拉取所有船的图片数据,再在Python层面完成关联,同样避免重复查询。

内容的提问来源于stack exchange,提问作者Pablo J

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 06:47:31