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

Odoo中如何让delivery_product_id仅显示当前销售订单关联产品

问题:限制交付计划的产品选择范围为当前销售订单的明细产品

原始代码

class sale_order(models.Model):
    _inherit = 'sale.order'
    order_ids = fields.One2many('sale.order.line','sales_order_id','Order Line')
    delivery_ids = fields.One2many('delivery.schedule','delivery_id','Delivery Line')

class sale_order_line(models.Model):
    _name = 'sale.order.line'
    sales_order_id = fields.Many2one('sale.order','Sales Order')
    product_id = fields.Many2one('product.product','Product')

class delivery_schedule(models.Model):
    _name = 'delivery.schedule'
    delivery_id = fields.Many2one('sale.order','Sales Order')
    delivery_product_id = fields.Many2one('sale.order.line','Product')

需求说明

如何配置Many2one字段delivery_product_id,使其仅展示当前sale_order文档中sale_order_line关联的product_id对应的产品?


解决方案

要实现这个需求,需要调整字段的关联模型并添加动态过滤域(domain),具体操作如下:

  1. 修正字段关联模型:
    原字段关联的是sale.order.line(销售订单行),但需求是选择产品,所以需要把关联模型改为product.product。

  2. 添加动态过滤域:
    通过当前交付计划关联的销售订单(delivery_id),关联到该订单下的所有销售订单行(order_ids),提取这些行对应的产品ID集合,作为可选产品的范围。

修改后的delivery_schedule类代码:

class delivery_schedule(models.Model):
    _name = 'delivery.schedule'
    delivery_id = fields.Many2one('sale.order','Sales Order')
    delivery_product_id = fields.Many2one(
        'product.product', 
        'Product',
        domain="[('id', 'in', delivery_id.order_ids.product_id.ids)]"
    )

补充说明

  • 当在销售订单表单内添加交付计划行时,delivery_id会被Odoo自动填充为当前销售订单,此时产品选择框会自动过滤出该订单下的所有产品。
  • 如果单独创建交付计划记录,需要先选择销售订单,产品列表才会更新为对应订单的产品范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 08:33:18