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

Django多外键查询:如何按Product关联的Supplier筛选OrderItem

解决Django跨外键层级筛选OrderItem的问题

嗨,这个需求在Django ORM里其实非常好实现,核心就是用**双下划线(__)**来跨关联关系进行查询,正好适配你这种OrderItem -> Product -> Supplier的层级结构。

下面给你几种常见场景的实现方式:

1. 通过Supplier实例筛选

如果你已经拿到了一个具体的Supplier对象(比如从数据库查询到的),直接通过外键关联筛选即可:

# 假设已经获取到目标供应商实例
target_supplier = Supplier.objects.get(id=1)
# 筛选该供应商产品对应的所有订单项
filtered_order_items = OrderItem.objects.filter(product__supplier=target_supplier)

2. 通过Supplier的ID筛选

如果只知道供应商的ID,不用先查询实例,直接通过ID字段筛选:

# 筛选ID为123的供应商产品对应的订单项
filtered_order_items = OrderItem.objects.filter(product__supplier__id=123)

3. 通过Supplier的其他字段筛选

还可以直接根据Supplier的名称、CUIT等属性来筛选,比如按供应商名称匹配:

# 筛选名称为"XX科技有限公司"的供应商产品对应的订单项
filtered_order_items = OrderItem.objects.filter(product__supplier__name="XX科技有限公司")
# 或者用模糊匹配(比如包含"科技"的供应商)
filtered_order_items = OrderItem.objects.filter(product__supplier__name__contains="科技")

4. 排除指定供应商的订单项

如果需要排除某个供应商的订单项,使用exclude方法即可:

# 排除名称为"YY贸易"的供应商产品对应的订单项
filtered_order_items = OrderItem.objects.exclude(product__supplier__name="YY贸易")

原理说明

Django ORM的双下划线语法就是用来遍历外键关联路径的:

  • product__supplier 表示先找到OrderItem关联的Product,再找到该Product关联的Supplier
  • 后续还可以继续追加双下划线访问Supplier的任意字段,比如product__supplier__cuit

这样就能轻松实现跨多层外键的筛选需求啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:16:24