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

Odoo中如何通过Domain限制Many2one仅选择指定Many2many值

解决Odoo中Many2one字段Domain限制为当前记录Many2many集合的问题

你在配置Domain时踩了两个典型的小坑,咱们直接来修正并解释清楚:

错误点分析

  1. 筛选字段方向错了:你原来的Domain里用default_gallery_product_id作为筛选条件的左值,这完全不对——我们要筛选的是product.template模型的记录,所以左值应该是该模型的id字段,用来匹配当前记录的Many2many集合里的产品ID。
  2. 引用的字段名不对:你写的filial_page_gallery_rstamp_products_ids是product.template模型里的字段,但当前操作的是filial_page_products模型,对应的Many2many字段是gallery_rstamp_products_ids,这才是你要引用的当前记录的字段。

修正后的代码

class filial_page_products(models.Model):
    _name = 'pr_filials.filial_page_products'  # 补上模型名定义更规范
    gallery_rstamp_products_ids = fields.Many2many(
        'product.template', 
        'gallery_rstamp_products_rel', 
        'gallery_rstamp_products_ids', 
        'filial_page_new_rstamp_products_ids', 
        'Gallery products'
    )
    # 正确的Domain配置
    default_gallery_product_id = fields.Many2many(
        'product.template',
        'Default maket', 
        domain="[('id', 'in', gallery_rstamp_products_ids)]"
    )

class product(models.Model):
    _inherit = 'product.template'
    filial_page_gallery_rstamp_products_ids = fields.Many2many(
        'product.template', 
        'gallery_rstamp_products_rel', 
        'filial_page_recovery_rstamp_products_ids', 
        'gallery_rstamp_products_ids', 
        'Gallery list'
    )
    filial_page_default_maket_product_ids = fields.One2many(
        'pr_filials.filial_page_products', 
        'default_gallery_product_id', 
        'Linked page products'
    )

原理说明

在Odoo的字段Domain配置里:

  • 左值('id')对应目标模型(product.template)的主键,用来定位要筛选的产品
  • 右值gallery_rstamp_products_ids直接引用当前filial_page_products记录的Many2many字段,Odoo会自动解析这个字段下所有product.template记录的ID集合,这样就实现了“仅选择当前记录Gallery products中的产品”的需求。

另外可以检查下Many2many关联表的外键对应关系是否正确,如果之前能正常保存关联数据,这部分应该没问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:37:44