在二次开发的过程中有的菜单项用不着,就需要把它删除,但是删除可能会导致莫名其妙的错误,所以就它隐藏起来是最优的选择。隐藏一下这个二级菜单【客户】 (Customers)
原来有xpath插入过字段的tree就无法隐藏。所以隐藏这个【Customers】效果如下:
代码如下:继承这个模型:【sale.order】 init里要引入,权限得写。
from odoo import fields, models, api, _
class testInherit(models.Model):
_inherit = 'sale.order'
testInherit = fields.Char()
视图文件:【我往tree里加了一个testInherit的字段 ——这个不是本篇需要关注的内容】
<odoo>
<data>
<record model="ir.ui.view" id="view_testInherit_tree">
<field name="name">testInherit_tree</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_quotation_tree_with_onboarding"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='user_id']" position="after">
<field name="testInherit"/>
</xpath>
</field>
</record>
<record id="sale.res_partner_menu" model="ir.ui.menu">
<field name="active" eval="False"/>
</record>
</data>
</odoo>
重点是这个: record id为需要隐藏的菜单ID 【包名+菜单ID】
隐藏:eval="False" 显示:eval="True"
官方的这个sale的【报价单】和【客户】的菜单不在sale_views的最上边:(找了半天没找到)
先拿【报价单】举例:通过在sale_views.xml里搜索【Quotations】
找到了视图的ID,再通过这个视图ID:action_quotations_with_onboarding 就一定能找到菜单
菜单的action就是关联的视图的ID,只是没有写name="Quotations"所以当时直接搜索才会没找到,官方这样写可能有他的用意,大概率不是偷懒,初学者不敢下定论。同理我们也能找到客户【customer】的菜单ID:【res_partner_menu】
这里还有一个groups 应该是分了一个组,为了设置权限。所以隐藏菜单只需三行代码:
<record id="sale.res_partner_menu" model="ir.ui.menu">
<field name="active" eval="True"/>
</record>
这个【sale.res_partner_menu】就是一步步找到的。隐藏和显示上边已经提过了。
注意:1.继承的话记得在depends里添加依赖。
2.使用xpath的方式来修改过后的原视图就不能隐藏了,在依赖模块用到对应菜单的时候不可以将其隐藏。