如何在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条件的过滤器,再在动作里调用它:
- 先写过滤器的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>
- 修改动作的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
相关产品推荐
相关产品推荐

