Odoo中如何在产品变体列表页添加产品模板自定义字段搜索
问题排查与解决方案:Odoo产品变体搜索表单添加型号字段报错
错误原因
报错提示“Domain on non-relational field makes no sense”,核心问题是你在视图的普通字符字段(model_number_search)上设置了domain属性,这不符合Odoo的规则:
domain属性仅适用于关联字段(如many2one/many2many),用来限制可选值范围;- 你已经通过
related字段把模板的model_number关联到了产品变体,完全不需要额外加domain来筛选。
修复方案(两种可选)
方案一:简化现有代码(推荐)
保留关联字段,移除视图中多余的domain属性:
模型代码(无需修改)
class ProductProduct(models.Model): _inherit = 'product.product' model_number_search = fields.Char(related='product_tmpl_id.model_number', string='Model Number', readonly=True, store=True)
视图代码(移除domain)
<record id="res_product_product_tree_new" model="ir.ui.view"> <field name="name">product.product_search_form_view</field> <field name="model">product.product</field> <field name="inherit_id" ref="product.product_search_form_view"/> <field name="arch" type="xml"> <xpath expr="//field[@name='name']" position="after"> <field name="model_number_search" string="Model Number"/> </xpath> </field> </record>
方案二:无需新增关联字段,直接关联模板字段搜索
如果不想在product.product模型新增字段,可以直接在搜索视图中使用关联路径:
视图代码(无需修改模型)
<record id="res_product_product_tree_new" model="ir.ui.view"> <field name="name">product.product_search_form_view</field> <field name="model">product.product</field> <field name="inherit_id" ref="product.product_search_form_view"/> <field name="arch" type="xml"> <xpath expr="//field[@name='name']" position="after"> <field name="product_tmpl_id.model_number" string="Model Number"/> </xpath> </field> </record>
说明
- 方案一的
store=True会把字段值存在数据库,搜索性能更好; - 方案二更轻量化,无需额外数据库字段,适合简单场景。
内容的提问来源于stack exchange,提问作者ahmed mohamady
相关产品推荐
相关产品推荐

