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

如何在Odoo中为销售订单现有搜索筛选器添加搜索域并排查报错?

Odoo销售订单筛选器优化问题解答

问题背景

我给Odoo的Sales Order(销售订单)新增了title字段,希望在销售订单列表视图的搜索框中支持通过该字段搜索。目前使用position="replace"的方式可以实现需求,但代码略显冗余;尝试用position="attributes"仅替换筛选器的filter_domain时,触发了以下错误:

Caused by: InvalidDomainError: Invalid domain AST

以下是两种实现代码:

可运行但冗余的代码(replace方式)

<record id="view_sales_order_filter_inherit_sale" model="ir.ui.view">
        <field name="name">sale.order.filter.toledo.sale</field>
        <field name="model">sale.order</field>
        <field name="inherit_id" ref="sale.view_sales_order_filter" />
        <field name="arch" type="xml">
           <!-- <field name="name" position="attributes">
                <attribute name="filter_domain">
                    "['|', '|',('name', 'ilike', self),('client_order_ref', 'ilike', self),'|',('partner_id', 'child_of', self),('title','ilike', self)]"
                </attribute>
            </field>
            -->
            <field name="name" position="replace">
                <field name="name" string="Order"
                    filter_domain="['|', '|',('name', 'ilike', self),('client_order_ref', 'ilike', self),'|',('partner_id', 'child_of', self),('title','ilike', self)]"/>
            </field>
        </field>
    </record>

报错的代码(attributes方式)

<record id="view_sales_order_filter_inherit_sale" model="ir.ui.view">
        <field name="name">sale.order.filter.toledo.sale</field>
        <field name="model">sale.order</field>
        <field name="inherit_id" ref="sale.view_sales_order_filter" />
        <field name="arch" type="xml">
           <field name="name" position="attributes">
                <attribute name="filter_domain">
                    "['|', '|',('name', 'ilike', self),('client_order_ref', 'ilike', self),'|',('partner_id', 'child_of', self),('title','ilike', self)]"
                </attribute>
            </field>
        </field>
    </record>

问题分析与解决

1. 报错原因

域名本身逻辑没有问题,报错是因为使用position="attributes"修改filter_domain时,额外添加的外层双引号导致解析失败。

在replace方式中,filter_domain作为XML属性,值需要用双引号包裹;但使用attributes方式时,<attribute>标签内的内容会直接赋值给目标属性,此时再添加外层双引号,会让Odoo解析到的domain变成""['|', ...]"",外层双引号被当成了domain的一部分,从而触发无效域语法错误。

2. 能否用position="attributes"实现需求?

完全可以,只需要去掉filter_domain值外层的双引号即可。修正后的代码如下:

<record id="view_sales_order_filter_inherit_sale" model="ir.ui.view">
        <field name="name">sale.order.filter.toledo.sale</field>
        <field name="model">sale.order</field>
        <field name="inherit_id" ref="sale.view_sales_order_filter" />
        <field name="arch" type="xml">
           <field name="name" position="attributes">
                <attribute name="filter_domain">
                    ['|', '|',('name', 'ilike', self),('client_order_ref', 'ilike', self),'|',('partner_id', 'child_of', self),('title','ilike', self)]
                </attribute>
            </field>
        </field>
    </record>

3. 额外验证要点

  • 确认title字段已正确添加到sale.order模型,且字段类型支持ilike搜索(如char、text类型)
  • 确保domain逻辑符合预期:多条件或查询,覆盖订单名称、客户订单参考、客户(含子客户)、新增的title字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 01:48:28