如何在Odoo 10中通过继承修改父级菜单项名称
在Odoo 10中通过继承方式修改模块显示名称
1. 先创建一个自定义模块(核心前提)
你得先搭一个自己的小模块来承载这个修改——毕竟不能直接改原模块代码,不然后续Odoo升级会把你的改动覆盖掉。模块的基础结构大概是这样:
my_asset_rename/ ├── __init__.py ├── __manifest__.py └── views/ └── menu_inherit.xml
__init__.py可以是空文件,或者简单写from . import views(可选)__manifest__.py要声明依赖原Maintenance模块,示例代码如下:
{ 'name': 'Rename Maintenance to Asset', 'version': '1.0', 'author': 'Your Name', 'depends': ['maintenance'], # 必须依赖原维护模块才能继承它的内容 'data': [ 'views/menu_inherit.xml', # 指定要加载的继承视图文件 ], 'installable': True, 'auto_install': False, }
2. 编写继承视图修改菜单名称
在views/menu_inherit.xml里写继承代码,定位到原模块的根菜单,直接修改它的显示名称就行。这里给你两种写法:
写法一:直接继承菜单记录(简洁直观)
<?xml version="1.0" encoding="utf-8"?> <odoo> <record id="maintenance.menu_maintenance_root_inherit" model="ir.ui.menu"> <field name="name">Asset</field> <field name="inherit_id" ref="maintenance.menu_maintenance_root"/> <!-- 直接覆盖name字段,把原来的Maintenance替换成Asset --> </record> </odoo>
写法二:用XPath定位修改(更灵活,适合复杂场景)
<?xml version="1.0" encoding="utf-8"?> <odoo> <template id="menu_maintenance_root_inherit" inherit_id="maintenance.menu_maintenance_root"> <xpath expr="//field[@name='name']" position="replace"> <field name="name">Asset</field> </xpath> </template> </odoo>
3. 安装自定义模块生效
把这个模块放到Odoo的addons目录下,重启Odoo服务,然后在后台应用列表里找到你创建的Rename Maintenance to Asset模块,点击安装。安装完成后刷新页面,就能看到原来的「Maintenance」已经变成「Asset」啦!
内容的提问来源于stack exchange,提问作者law rence




