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
相关产品推荐
相关产品推荐

