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

