自定义模块中如何为hr.employee配置不同看板视图?
解决Odoo自定义看板视图不显示的问题
嘿,我明白你现在卡在哪了——你给hr.employee加了自定义看板视图,但打开动作窗口时还是显示原生的看板,对吧?这其实是因为你的动作窗口(ir.actions.act_window)没明确指定要使用你的新视图,Odoo默认会加载该模型优先级最高的看板视图,所以你的自定义视图被“藏”起来了。
下面是具体的解决步骤,分两步走:
1. 确认自定义看板视图的定义正确
首先,确保你的自定义看板视图已经正确定义,并且设置了比原生视图更高的优先级。比如你的视图XML应该是这样的:
<record model="ir.ui.view" id="hr_birthdays_kanban_view"> <field name="name">hr.employee.birthdays.kanban</field> <!-- 模型还是hr.employee,因为你是继承而非新建 --> <field name="model">hr.employee</field> <field name="arch" type="xml"> <!-- 这里是你的自定义看板结构,和原生视图做区分 --> <kanban> <!-- 只加载你需要的字段,比如生日相关 --> <field name="name"/> <field name="birthday"/> <field name="department_id"/> <templates> <t t-name="kanban-box"> <div class="oe_kanban_global_click"> <div class="oe_kanban_content"> <h4><field name="name"/></h4> <p class="text-muted">部门: <field name="department_id"/></p> <p class="text-primary">生日: <field name="birthday"/></p> </div> </div> </t> </templates> </kanban> </field> <!-- 设置比原生视图更高的优先级,原生一般是10,设为20就能优先加载 --> <field name="priority" eval="20"/> </record>
2. 修改动作窗口,明确指定使用自定义视图
接下来要调整你的ir.actions.act_window记录,直接指定默认使用你的自定义看板视图,而不是依赖Odoo的自动选择。修改后的代码如下:
<record model="ir.actions.act_window" id="hr_birthdays.action_window"> <field name="name">Today Birthdays</field> <field name="res_model">hr.employee</field> <field name="priority" eval="1"/> <!-- 可以在这里加过滤条件,比如只显示今天生日的员工 --> <field name="context">{"search_default_today_birthdays": True}</field> <!-- 清空原有视图关联,添加我们的自定义看板视图 --> <field name="view_ids" eval="[(5, 0, 0), (0, 0, {'view_mode': 'kanban', 'view_id': ref('hr_birthdays.hr_birthdays_kanban_view')})]"/> <!-- 指定允许的视图模式,把kanban放在第一位 --> <field name="view_mode">kanban,tree,form</field> <!-- 强制默认打开自定义看板视图 --> <field name="default_view_id" ref="hr_birthdays.hr_birthdays_kanban_view"/> </record>
关键说明:
view_ids字段的eval语法:(5,0,0)是清空动作窗口原有的视图关联,(0,0, {...})是添加新的视图绑定,指定view_mode为kanban,并关联你的自定义视图ID。default_view_id直接指向你的看板视图ID,确保用户打开动作窗口时默认显示它。- 如果你的自定义视图优先级已经设得比原生高,其实也可以不用
view_ids,但明确指定会更稳妥,避免其他模块的视图干扰。
最后,记得升级你的自定义模块,并且清除浏览器缓存(Odoo经常会缓存旧视图),再打开动作窗口就能看到你的自定义看板了!
内容的提问来源于stack exchange,提问作者Prashanth K
相关产品推荐
相关产品推荐

