Odoo 10搜索视图中Many2many字段筛选报错咨询
解决Odoo 10中Many2many字段搜索视图Domain报错问题
嘿,我来帮你搞定这个Odoo 10里Many2many字段搜索视图的报错问题!你遇到的“Uncaught Error: Failed to evaluate search criterions”通常是domain语法错误、字段引用不对或者XML结构不完整导致的,下面给你一步步拆解解决方案:
常见错误原因&修复方法
1. Many2many字段的Domain操作符用错了
Many2many是多对多关系,存储的是集合,不能直接用=或者!=这类操作符,必须用in或者not in。比如你要筛选关联了特定记录的主模型数据,正确的domain写法是:
[('your_many2many_field', 'in', [target_record_id])]
举个例子,如果你的Many2many字段叫partner_ids,要筛选关联了ID为1的伙伴的记录,domain应该写[('partner_ids', 'in', [1])],而不是[('partner_ids', '=', 1)]。
2. 搜索视图的XML结构不完整
你给出的XML代码里<group>标签没闭合,而且缺少必要的筛选字段/过滤器,这会导致Odoo解析XML时出错。完整的搜索视图应该包含要搜索的字段或者过滤器,再加上排序组,所有标签必须正确闭合。
3. 字段引用拼写错误
确保你在domain里用的字段名和模型中定义的Many2many字段名完全一致,大小写、拼写都不能错,比如模型里定义的是fare_well_partners,你就不能写成farewell_partners。
正确的示例代码
假设你的模型fare.well.room.ser里有一个叫partner_ids的Many2many字段,关联res.partner模型,下面是修复后的搜索视图XML:
<record id="view_partner_fare_well_ser_search_master" model="ir.ui.view"> <field name="name">Farewell Room Search</field> <field name="model">fare.well.room.ser</field> <field name="arch" type="xml"> <search string="Farewell Room"> <!-- 把Many2many字段添加到搜索栏,方便用户手动选择关联记录 --> <field name="partner_ids" string="关联伙伴"/> <!-- 添加预设过滤器,按条件筛选主模型记录 --> <filter name="filter_active_partners" string="仅关联活跃伙伴" domain="[('partner_ids.active', '=', True)]"/> <!-- 排序组需正确闭合标签 --> <group string="Order By"> <filter name="order_by_name" string="按名称排序" sequence="1" domain="[]" context="{'order_by': 'name'}"/> <filter name="order_by_create_date" string="按创建时间排序" sequence="2" domain="[]" context="{'order_by': 'create_date desc'}"/> </group> </search> </field> </record>
额外排查技巧
- 打开浏览器开发者工具(F12),查看控制台的完整报错信息,里面会具体指出是哪个部分的domain出了问题,比如括号不匹配、引用了不存在的字段等。
- 如果是给Many2many字段的可选值加过滤(比如选择伙伴时只显示活跃的),要把domain加在
<field>标签上,比如<field name="partner_ids" domain="[('active', '=', True)]"/>,这和筛选主模型记录的domain是两回事。
内容的提问来源于stack exchange,提问作者Pawan Kumar Sharma
相关产品推荐
相关产品推荐

