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

Odoo中如何覆写现有Action添加自定义Domain实现子任务过滤

Odoo中覆写现有Action添加自定义Domain的正确方法

需求背景

需要基于project_project模型的自定义布尔字段display_under_tasks过滤任务列表中的子任务:

  • 当display_under_tasks为True时,显示所有父任务(parent_id为空)和子任务(parent_id不为空)
  • 当display_under_tasks为False时,仅显示父任务,隐藏所有子任务

当前问题

你新建了独立的custom_action_project_task_all Action,但这不会替换Odoo默认的任务列表Action,因此修改未生效。

正确解决方案

要修改默认Action,需直接继承Odoo原有的任务Action记录,而非新建,具体步骤如下:

1. 定位默认任务Action的ID

Project模块中默认的任务列表Action ID为project.action_view_task,直接对该ID进行覆写即可。

2. 覆写Action并修正Domain

在你的project_task_views.xml中添加以下代码,替换之前的自定义Action:

<record id="project.action_view_task" model="ir.actions.act_window">
    <field name="domain">[
        '|',
        ('parent_id', '=', False),
        ('project_id.display_under_tasks', '=', True)
    ]</field>
</record>
  • 此处Domain逻辑为:显示父任务,或者属于允许显示子任务项目的子任务,完全匹配需求。
  • 无需重复原Action的name、view_mode等字段,Odoo会自动保留原有属性,仅更新你修改的domain字段。

3. 修正原Domain逻辑错误

你之前写的Domain[('parent_id', '=', False), ('project_id.display_under_tasks', '=', True)]逻辑有误,它仅会显示允许显示子任务项目的父任务,而非显示子任务,需按上述代码修正。

额外说明

若需在搜索视图中保留手动切换显示/隐藏子任务的过滤选项,你之前添加的Hide Subtasks过滤器可保留,但建议调整Domain逻辑:

<filter string="Hide Subtasks" name="hide_subtasks"
        domain="[('parent_id', '=', False)]"/>

这样用户可手动切换是否隐藏子任务,而默认Action的Domain已实现基于项目字段的自动过滤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 03:10:58