Django技术问题:如何从子模型获取关联表数据?
问题根源
你的代码存在两个关键问题,导致关联数据无法正常呈现:
- 方法名拼写错误:将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
相关产品推荐
相关产品推荐

