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

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作为中间桥梁:

  1. 创建对应纯文本内容的ir.ui.view(表单视图类型),设置好模型、视图结构
  2. 创建ir.actions.act_window动作,通过view_id字段引用上述视图,指定res_model为对应模型
  3. 在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 20:01:01