XMLID
什么是XML ID
xmlid的含义是指用户定义在xml记录中的id,即我们在xml文件中经常写到的id。它的作用是什么?
我们知道,每个模块在安装的时候会自动加载预先定义好的基础数据,这部分数据中包括了,内置的权限组、记录规则、视图和一些组织数据。因为我们的模块设计的原则就是要能够独立安装、不依赖于特定的数据库。那么odoo中的某些业务逻辑需要获取这些预定义数据在数据库中的记录ID,这就是XMLID的作用,提供一种编程意义上的数据库id映射。
xmlid的构成
我们首先来了解一下XMLID的组成,xmlid由两部分组成,一部分是模块名,另外一部分是xml记录中的id。以我们的百度地图模块中的一个xml记录为例:
<record id="action_open_baidu_map_crm" model="ir.actions.act_window">
<field name="name">baidu map</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner</field>
<field name="view_mode">bmap</field>
</record>
这块代码映射到数据库中的xmlid为 baidu_map.action_open_baidu_map_crm。当前模块内的模块名称可以省略。
获取xmlid映射的id
那么如何获取xmlid对应的id呢?这里要分几种情况。
python文件中的获取
对于models文件中,我们可以利用enviroment提供给我们的ref方法来获取:
self.env.ref("baidu_map.action_open_baidu_map_crm").id
对于controller,类似地:
request.env.ref("baidu_map.action_open_baidu_map_crm").id
xml文件中获取
首先,xml中哪些情况需要用到xmlid对应的id呢?