Odoo中如何通过Domain限制Many2one仅选择指定Many2many值
解决Odoo中Many2one字段Domain限制为当前记录Many2many集合的问题
你在配置Domain时踩了两个典型的小坑,咱们直接来修正并解释清楚:
错误点分析
- 筛选字段方向错了:你原来的Domain里用
default_gallery_product_id作为筛选条件的左值,这完全不对——我们要筛选的是product.template模型的记录,所以左值应该是该模型的id字段,用来匹配当前记录的Many2many集合里的产品ID。 - 引用的字段名不对:你写的
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
相关产品推荐
相关产品推荐

