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),具体操作如下:
修正字段关联模型:
原字段关联的是sale.order.line(销售订单行),但需求是选择产品,所以需要把关联模型改为product.product。添加动态过滤域:
通过当前交付计划关联的销售订单(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
相关产品推荐
相关产品推荐

