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

Django多表关联查询:从Orden获取Productos的nombre字段

解决Django关联查询获取Productos的nombre属性问题

你的查询仅返回Productos的ID,是因为producto__producto仅关联到ProductosOrden模型中的producto外键字段,默认返回该外键的主键值。要获取Productos模型的nombre属性,需要向下再关联一层,具体方法如下:

方法1:使用values()直接指定目标字段

修改查询语句,通过双下划线关联到Productos的nombre字段:

orden_productos_nombres = Orden.objects.filter(
    user=self.request.user, 
    ref_code='225v3cwhvqi0ymp2yw2n'
).values('producto__producto__nombre')

执行后会返回包含目标字段的QuerySet:

<QuerySet [{'producto__producto__nombre': '商品A'}, {'producto__producto__nombre': '商品B'}, ...]>

方法2:获取完整对象后访问属性(适合后续业务逻辑处理)

如果需要操作完整的模型对象,建议结合prefetch_related优化多对多关联查询,避免N+1查询问题:

# 获取目标订单对象
orden = Orden.objects.filter(
    user=self.request.user, 
    ref_code='225v3cwhvqi0ymp2yw2n'
).prefetch_related('producto__producto').first()

# 遍历提取所有商品名称
if orden:
    nombres = [po.producto.nombre for po in orden.producto.all()]

此时nombres会是一个包含对应Productos的nombre的列表。

补充说明

  • 关联查询的双下划线规则:模型字段__关联模型字段__目标字段,这里producto是Orden的多对多字段(关联ProductosOrden),producto__producto是ProductosOrden关联Productos的外键,最后__nombre就是Productos的目标字段。
  • 若需同时获取多个字段(比如nombre和precio_publico),可在values中添加多个参数:values('producto__producto__nombre', 'producto__producto__precio_publico')

内容的提问来源于stack exchange,提问作者Jorge López

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 18:07:13