Odoo 菜单定义和修改学习总结

odoo菜单定义和修改学习总结

环境

odoo-14.0.post20221212.tar

定义菜单

方式1:

<?xml version="1.0"?>
<odoo>
    <menuitem id="root_menu_id" name="TopMenu" web_icon="estate,static/img/icon.png">
        <menuitem id="second_level_menu" name="SecondLevelMenu">
            <menuitem id="third_level_menu1" action="third_level_menu1_action" sequence ="10"/>
            <menuitem id="third_level_menu2" action="third_level_menu2_action" sequence ="20"/>
        </menuitem>
    </menuitem>
</odoo>

说明:

  • id 菜单外部ID

  • name

    如果不指定name,则:

    • 如果为菜单设置了action,则获取action record定义中name字段的值作为菜单name属性的值
    • 如果未设置菜单action,则获取菜单外部ID为值作为菜单name属性的值
  • action

    打开菜单时需要执行的action的外部ID

  • web_icon

    指定菜单图标,格式:模块名称,图标路径,形如estate,static/img/icon.png 意为estate模块下的static/img/icon.png图标。其中图标路径,一般是相对于模块根目录的相对路径

  • sequence

    设置菜单展示顺序。该属性值越大,越靠右、靠下方展示。也就是说,菜单从左往右,从上到下,对应sequence属性值从小到大。

  • <menuitem>元素也可以放在<data>元素中,形如

    <?xml version="1.0"?>
    <odoo>
        <data>
            <menuitem id="root_menu_id" name="TopMenu" web_icon="estate,static/img/icon.png">
            ...
            </menuitem>
        </data>
    </odoo>
    
  • groups

    逗号分隔的res.groups模型的外部ID序列,形如groups="group_account_user,group_account_manager,group_account_invoice",表示菜单只能被group_account_user,group_account_manager,group_account_invoice 三个用户组访问。用于指定可以访问菜单的用户组。如果外部ID以-为前缀,则从菜单组中移除该ID代表的组,注意,如果指定用户组不是在当前模块中定义的,需要指定所在模块名称,形如estate.group_estate_property_root_menu

    示例:

    <?xml version="1.0"?>
    <odoo>
        <data>
            <menuitem id="root_menu_id" name="TopMenu" web_icon="estate,static/img/icon.png" groups="group_estate_property_root_menu">
            ...
            </menuitem>
        </data>
    </odoo>
    

方式2:通过parent来设置菜单层级

<?xml version="1.0"?>
<odoo>
    <menuitem id="root_menu_id" name="TopMenu" web_icon="estate,static/img/icon.png"/>
    <menuitem id="second_level_menu" name="SecondLevelMenu" parent="root_menu_id"/>
    <menuitem id="third_level_menu1" action="third_level_menu1_action" sequence ="10" parent="second_level_menu"/>
    <menuitem id="third_level_menu2" action="third_level_menu2_action" sequence ="20" parent="second_level_menu"/>
</odoo>

说明:

  • parent

指定父级菜单外部ID,如果上级菜单不在当前模块中,则需要指定上级菜单所在模块,形如parent="moduleName.parent_menu_id"

修改菜单

本节要介绍的是一种特殊的修改方式,并不是直接修改原有菜单定义。这种修改方式之所以特殊,是因为它不修改原有菜单的定义,而是通过重新定义菜单来修改,可以简单的类比为“继承”,具体做法如下:

  1. 定义一个新的菜单<menuitem>,将其id属性值设置为原有菜单所在模块名称及其id属性值的组合,形如:moduleName.source_menu_id(参见下述示例),如果新的菜单和原有菜单在同一个模块,可以省略moduleName.

  2. 修改相关菜单属性值为目标值(如果需要的话)

    示例:重新定义purchase.menu_purchase_root菜单名称

    <menuitem id="purchase.menu_purchase_root" name="omsPurchase"/>
    
  3. 以新定义的菜单为父级菜单,添加子菜单(如果需要的话),添加方式可以参考上文所述,需要注意的是,不管采用哪种方式,原有菜单的子菜单依然存在,并显示为新定义菜单的子菜单

  4. 隐藏原有菜单的子菜单(如果需要的话)

    定义一个<record>,将其id设置为要隐藏的子菜单所在模块名称及id属性值的组合,形如:moduleName.source_menu_id,如果新的菜单和原有菜单在同一个模块,可以省略moduleName.

    将其model设置为"ir.ui.menu"

    添加子元素 <field name="active" eval="False"></field>,其中eval=False则表示隐藏,eval=True表示显示

    <?xml version="1.0"?>
    <odoo>
        ...
        <record id="purchase.sub_menu_purchase" model="ir.ui.menu">
            <field name="active" eval="False"></field>
        </record>
    </odoo>
    

参考连接

https://www.odoo.com/documentation/14.0/zh_CN/developer/reference/addons/data.html#shortcuts

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Odoo 菜单定义和修改学习总结 - Python技术站

(0)
上一篇 2023年3月31日 下午9:06
下一篇 2023年3月31日

相关文章

  • odoo 开发入门教程系列-约束(Constraints)

    约束(Constraints) 上一章介绍了向模型中添加一些业务逻辑的能力。我们现在可以将按钮链接到业务代码,但如何防止用户输入错误的数据?例如,在我们的房地产模块中,没有什么可以阻止用户设置负预期价格。 odoo提供了两种设置自动验证恒定式的方法:Python约束 and SQL约束。 SQL 参考:与此主题相关的文档可以查看 Models 和Postgr…

    python 2023年4月18日
    00
  • Python 大数据量文本文件高效解析方案代码实现

    大数据量文本文件高效解析方案代码实现 测试环境 Python 3.6.2 Win 10 内存 8G,CPU I5 1.6 GHz 背景描述 这个作品来源于一个日志解析工具的开发,这个开发过程中遇到的一个痛点,就是日志文件多,日志数据量大,解析耗时长。在这种情况下,寻思一种高效解析数据解析方案。 解决方案描述 1、采用多线程读取文件 2、采用按块读取文件替代按…

    Python开发 2023年4月2日
    00
  • odoo wizard界面显示带复选框列表及勾选数据获取

    实践环境 Odoo 14.0-20221212 (Community Edition) 需求描述 如下图(非实际项目界面截图,仅用于介绍本文主题),打开记录详情页(form视图),点击某个按钮(图中的”选取ffers”按钮),弹出一个向导(wizard)界面,并将详情页中内联tree视图(”Offers” Tab页)的列表记录展示到向导界面,且要支持复选框,…

    python 2023年4月22日
    00
  • Python 基于xml.etree.ElementTree实现XML对比

    测试环境 Python 3.6 Win10 代码实现 #!/usr/bin/env python 3.4.0 #-*- encoding:utf-8 -*- __author__ = ‘shouke’ import xml.etree.ElementTree as ET def compare_xml_node_attributes(xml_node1, x…

    Python开发 2023年4月2日
    00
  • odoo 为form表单视图添加chatter功能

    实践环境 Odoo 14.0-20221212 (Community Edition) 需求描述 如图,给表单新增一个类似聊天的窗口,当记录一些表单活动(本例为自动记录当前记录状态变化) 需求实现 模型定义 odoo14customestatemodelsestate_property.py 需要继承mail.thread模型,并为需要追踪的字段设置trac…

    2023年3月31日
    00
  • odoo 开发入门教程系列-QWeb简史

    QWeb简史 到目前为止,我们的房地产模块的界面设计相当有限。构建列表视图很简单,因为只需要字段列表。表单视图也是如此:尽管使用了一些标记,如<group>或<page>,但在设计方面几乎没有什么可做的。 然而,如果我们想给我们的应用程序一个独特的外观,就必须更进一步,能够设计新的视图。此外,PDF报告或网站页面等其他功能需要另一个更…

    python 2023年4月22日
    00
  • odoo 开发入门教程系列-继承(Inheritance)

    继承(Inheritance) Odoo的一个强大方面是它的模块化。模块专用于业务需求,但模块也可以相互交互。这对于扩展现有模块的功能非常有用。例如,在我们的房地产场景中,我们希望在常规用户视图中直接显示销售人员的财产列表。 在介绍特定的Odoo模块继承之前,让我们看看如何更改标准CRUD(创建、检索,更新或删除)方法的行为 Python继承(Python …

    python 2023年4月17日
    00
  • Odoo 基于Win10搭建基于Win10搭建odoo14开发环境搭建

    实践环境 win10 Python 3.6.2 odoo_14.0.latest.tar.gz下载地址: https://download.odoocdn.com/download/14/src?payload=MTY3MDg1MTM3Ni4xNC5zcmMud0tZRWZLX2I5UVF0Tm51UUVqT1lQVE5PbGRyYW5zWTc4dHhuOW…

    2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部