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

Odoo16中为不同视图模式设置不同context的实现方法

在Odoo 16中为不同视图设置独立Context

核心解决方案:通过多个ir.actions.act_window.view实现

你可以创建多个ir.actions.act_window.view记录,为同一个动作的不同视图类型分别绑定专属context,这是Odoo官方支持的标准方式,能精准控制每个视图的上下文参数(比如group_by)。

示例代码

假设我们要为project.task模型的动作,分别给看板(kanban)和甘特图(gantt)设置独立context:

<!-- 基础动作定义 -->
<record id="action_task_all" model="ir.actions.act_window">
    <field name="name">所有任务</field>
    <field name="res_model">project.task</field>
    <field name="view_mode">kanban,gantt,tree,form</field>
    <!-- 全局context,会被视图级context覆盖 -->
    <field name="context">{'default_user_id': uid}</field>
</record>

<!-- 看板视图专属context -->
<record id="action_task_all_kanban" model="ir.actions.act_window.view">
    <field name="sequence" eval="1"/>
    <field name="view_mode">kanban</field>
    <field name="view_id" ref="project.view_task_kanban"/>
    <field name="act_window_id" ref="action_task_all"/>
    <!-- 看板默认按阶段分组 -->
    <field name="context">{'group_by': 'stage_id'}</field>
</record>

<!-- 甘特图视图专属context -->
<record id="action_task_all_gantt" model="ir.actions.act_window.view">
    <field name="sequence" eval="2"/>
    <field name="view_mode">gantt</field>
    <field name="view_id" ref="project.view_task_gantt"/>
    <field name="act_window_id" ref="action_task_all"/>
    <!-- 甘特图默认按负责人分组 -->
    <field name="context">{'group_by': 'user_id'}</field>
</record>

<!-- 其他视图可沿用全局context,或单独设置 -->
<record id="action_task_all_tree" model="ir.actions.act_window.view">
    <field name="sequence" eval="3"/>
    <field name="view_mode">tree</field>
    <field name="view_id" ref="project.view_task_tree"/>
    <field name="act_window_id" ref="action_task_all"/>
</record>

为什么之前的方法失效?

  • 带FOR-VIEW的context写法:这种非正式语法在Odoo 16中已不再兼容,官方不再支持通过这种方式隔离视图上下文。
  • Python表达式写法:如果尝试用if判断视图类型动态设置context(比如context="{'group_by': 'stage_id' if view_type == 'kanban' else 'user_id'}"),这种写法无法生效——动作的context是在加载时静态计算的,无法感知后续切换的视图类型。

注意事项

  • 每个ir.actions.act_window.view必须设置唯一的sequence,控制视图在切换面板中的显示顺序。
  • view_id必须引用目标模型对应的现有视图(或自定义视图)。
  • 视图级context会覆盖动作全局的context,若需保留全局参数,可在视图context中合并,比如{'group_by': 'stage_id', 'default_user_id': uid}。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 02:52:11