Odoo15中如何关联ir.ui.view类型动作与菜单?
Odoo15 纯文本页面菜单实现问题修正
现有代码的问题
- 两个
ir.ui.view的name字段重复,会导致视图覆盖或识别异常,需设置唯一名称 - 菜单的
action属性引用了不存在的动作ID,两个子菜单分别应对应haatglobal_ahmed_about_a和haatglobal_ahmed_about_s ir.actions.act_window中的type字段属于冗余配置,默认值就是ir.actions.act_window,可删除- 表单视图内容不完整,纯文本需用合法HTML标签包裹,同时建议添加
delete="false"彻底禁用编辑相关操作 - 动作名称应与菜单对应,避免混淆
修正后的完整代码
<!-- 关于公司视图 --> <record id="globalhaatahmedviewa" model="ir.ui.view"> <field name="name">haatglobal_ahmed.about_company</field> <field name="model">haatglobal_ahmed.haatglobal_ahmed</field> <field name="priority" eval="16"/> <field name="arch" type="xml"> <form create="false" edit="false" delete="false"> <div class="oe_structure"> <h2>关于我们公司</h2> <p>这里是公司介绍的纯文本内容,可以添加任意HTML格式的文本</p> </div> </form> </field> </record> <!-- 支持页面视图 --> <record id="globalhaatahmedviews" model="ir.ui.view"> <field name="name">haatglobal_ahmed.support</field> <field name="model">haatglobal_ahmed.haatglobal_ahmed</field> <field name="priority" eval="16"/> <field name="arch" type="xml"> <form create="false" edit="false" delete="false"> <div class="oe_structure"> <h2>支持服务</h2> <p>这里是支持页面的纯文本内容,可自由编辑HTML结构</p> </div> </form> </field> </record> <!-- 关于公司动作 --> <record id="haatglobal_ahmed_about_a" model="ir.actions.act_window"> <field name="name">About Company</field> <field name="res_model">haatglobal_ahmed.haatglobal_ahmed</field> <field name="view_mode">form</field> <field name="view_id" ref="globalhaatahmedviewa"/> <!-- 设置target为current,在当前标签页打开 --> <field name="target">current</field> </record> <!-- 支持页面动作 --> <record id="haatglobal_ahmed_about_s" model="ir.actions.act_window"> <field name="name">Support</field> <field name="res_model">haatglobal_ahmed.haatglobal_ahmed</field> <field name="view_mode">form</field> <field name="view_id" ref="globalhaatahmedviews"/> <field name="target">current</field> </record> <!-- 菜单配置 --> <menuitem name="HAAT Global" id="haatglobal_ahmed.menu_root"/> <menuitem name="About Company" id="haatglobal_ahmed.menu_a" parent="haatglobal_ahmed.menu_root" action="haatglobal_ahmed_about_a"/> <menuitem name="Support" id="haatglobal_ahmed.menu_s" parent="haatglobal_ahmed.menu_root" action="haatglobal_ahmed_about_s"/>
视图与菜单的关联逻辑
Odoo中无法直接将ir.ui.view绑定到菜单,必须通过ir.actions.act_window作为中间桥梁:
- 创建对应纯文本内容的
ir.ui.view(表单视图类型),设置好模型、视图结构 - 创建
ir.actions.act_window动作,通过view_id字段引用上述视图,指定res_model为对应模型 - 在
menuitem标签中,通过action属性引用创建好的ir.actions.act_window的ID,完成菜单→动作→视图的关联
注意:如果haatglobal_ahmed.haatglobal_ahmed模型尚未创建,需要先在Python文件中定义这个模型(即使是空模型,仅用于承载视图),示例如下:
from odoo import models, fields class HaatglobalAhmed(models.Model): _name = 'haatglobal_ahmed.haatglobal_ahmed' _description = 'HAAT Global Ahmed Model'
内容的提问来源于stack exchange,提问作者Ahmed Ragab
相关产品推荐
相关产品推荐

