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

如何在Odoo中通过XML代码设置默认AND逻辑的搜索过滤器?

问题

配置ir.actions.act_window动作时,通过context传入search_default_projects_activities和search_default_active_poa两个搜索过滤器,但这些过滤器默认以OR逻辑生效(对应图1:过滤器默认使用OR运算符)。已知能通过GUI改成AND逻辑(对应图2:设置为AND运算符),但我想通过XML代码实现默认用AND逻辑,之前试了几次没成功,只能靠GUI操作,求解决办法。

当前XML配置代码:

<record id="action_uc_planning_poa_dependency_project" model="ir.actions.act_window">
    <field name="name">Proyectos</field>
    <field name="type">ir.actions.act_window</field>
    <field name="res_model">uc_planning.poa_dependency_project</field>
    <field name="view_mode">tree,form</field>
    <field name="domain">[]</field>
    <field name="context">
        {
        'search_default_poa_dependency_id': 1,
        'search_default_active_poa':1,
        'search_default_projects_activities': 1
        }
    </field>
</record>
解决方案

方法1:直接在domain里写死AND条件

放弃使用search_default_*参数,直接把所有要过滤的条件用AND逻辑写在domain字段里,加载动作时会直接生效:

<record id="action_uc_planning_poa_dependency_project" model="ir.actions.act_window">
    <field name="name">Proyectos</field>
    <field name="type">ir.actions.act_window</field>
    <field name="res_model">uc_planning.poa_dependency_project</field>
    <field name="view_mode">tree,form</field>
    <field name="domain">[('poa_dependency_id', '=', 1), ('active_poa', '=', 1), ('projects_activities', '=', 1)]</field>
    <field name="context">{}</field>
</record>

这种方式最直接,所有条件强制按AND逻辑过滤。

方法2:自定义AND逻辑过滤器再调用

如果需要保留过滤器的可视化(让用户能看到、调整条件),可以先定义一个包含所有AND条件的过滤器,再在动作里调用它:

  1. 先写过滤器的XML:
<record id="filter_poa_and_activities" model="ir.filters">
    <field name="name">POA激活且关联项目活动</field>
    <field name="model_id">uc_planning.poa_dependency_project</field>
    <field name="domain">[('active_poa', '=', 1), ('projects_activities', '=', 1), ('poa_dependency_id', '=', 1)]</field>
    <field name="context">{"group_by": []}</field>
    <field name="user_id">False</field> <!-- 所有用户都能用 -->
</record>
  1. 修改动作的context,调用这个过滤器:
<record id="action_uc_planning_poa_dependency_project" model="ir.actions.act_window">
    <field name="name">Proyectos</field>
    <field name="type">ir.actions.act_window</field>
    <field name="res_model">uc_planning.poa_dependency_project</field>
    <field name="view_mode">tree,form</field>
    <field name="domain">[]</field>
    <field name="context">{'search_default_filter_poa_and_activities': 1}</field>
</record>

这样打开动作时会默认加载这个AND逻辑的过滤器,用户也能在界面上看到并调整条件。

方法3:试试context里加search_and参数(看Odoo版本)

部分Odoo版本支持在context里加'search_and': True,强制多个search_default_*参数用AND逻辑,你可以试试改context:

<record id="action_uc_planning_poa_dependency_project" model="ir.actions.act_window">
    <field name="name">Proyectos</field>
    <field name="type">ir.actions.act_window</field>
    <field name="res_model">uc_planning.poa_dependency_project</field>
    <field name="view_mode">tree,form</field>
    <field name="domain">[]</field>
    <field name="context">
        {
        'search_default_poa_dependency_id': 1,
        'search_default_active_poa':1,
        'search_default_projects_activities': 1,
        'search_and': True
        }
    </field>
</record>

注意:这个参数不是所有版本都支持,得根据你用的Odoo版本测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 15:53:17