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

Django技术问题:如何从子模型获取关联表数据?

Django中select_related获取关联数据失败的解决办法

问题根源

你的代码存在两个关键问题,导致关联数据无法正常呈现:

  • 方法名拼写错误:将Django ORM的正确方法select_related误写为selected_related,系统无法识别这个错误方法,自然不会预取关联的Coin数据。
  • 查询集未执行且未访问关联字段:Django查询集是惰性执行的,不通过.all()、遍历等操作不会触发实际数据库查询;同时默认不会主动展示关联表数据,必须主动访问关联属性才能获取对应内容。

修正方案

1. 修正方法名拼写

把代码中的selected_related改为正确的select_related。

2. 正确执行查询并获取关联数据

触发查询集执行,并主动访问关联的ticker属性(对应Coin对象)来获取关联数据。

修正后的Views.py代码示例:

def get(request):
    # 正确调用select_related,获取包含关联数据的查询集
    return_rate_list = models.ReturnRate.objects.select_related('ticker').all()
    
    # 遍历查询集,访问关联的Coin数据
    for item in return_rate_list:
        # 获取关联Coin对象的字段值
        coin_name = item.ticker.name
        coin_ticker = item.ticker.ticker
        # 可根据需求处理数据,比如存入列表用于返回前端
        print(f"币种:{coin_name},代码:{coin_ticker}")
    
    # 后续可将数据传递给模板或返回JSON响应
    ...

模型关联说明

你的模型定义是合理的:ReturnRate通过ticker字段(OneToOneField)关联到Coin的ticker字段(通过to_field='ticker'指定),且Coin的ticker已设置unique=True,满足一对一关联的唯一性要求。使用select_related('ticker')后,Django会执行JOIN查询一次性拉取两张表的数据,避免N+1查询问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:36:25