我在使用Odoo 8,我想通过一个XML文件来引入数据库中的数据。
这个文件的内容是下一个。
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data noupdate="1">
<record id="event_invitation_email_template" model="email.template">
<field name="name">Event Invitation</field>
<field name="subject">Invitation to an event</field>
<field name="email_from">${(object.event_id.user_id.email or 'noreply@localhost')|safe}</field>
<field name="email_to">${object.email|safe}</field>
</record>
</data>
</openerp>
这很好用 但是我想增加另一个字段。model_id
,这是一个 Many2one
(指的是 ir.model
). 如果我想设置的值有XML ID,我就知道该怎么做了,但事实并非如此。
我想设置模型 我的新模型 作为 model_id
,但我不搜索的话,不知道它在数据库中的ID。
所以我不知道如何管理我的目的。谁能帮帮我,好吗?
背景是这样的
在通过安装资源(模型、字段、模型记录、视图、记录规则、动作、菜单项等)加载数据时,Odoo在'ir_model_data'表('ir.model.data'对象)中注册了所有资源的映射记录,所以我们可以在以后引用这些记录,甚至从其他模块中引用。
'ir_model_data'中的映射记录有以下几个显著的列。
记录名与模块名一起构成了我们熟知的资源外部ID,它有以下完全限定的形式。'module_name.resource_name'.
在XML数据中定义的记录通过 "记录 "标签的 "id "属性来定义它们的外部ID。
id'属性可以明确包含'module_name.'(完全限定形式)或不包含。(完全限定形式)或不限定。在后一种情况下(相对形式),声明资源的模块被假定。
上面的长篇小说是要求有足够的背景,才会有下面的答案。
回答:在处理任何'record'标签的子'字段'标签时,'ref'属性应该具有引用现有记录的外部ID(外部ID)。
在处理任何'record'标签的子'字段'标签时,'ref'属性要有被引用的现有记录的External ID(完全限定或相对形式)。
引用模型的映射记录是在初始化模块modelsfields时创建的,由于它们缺乏相应的XML记录,不能通过这种方式声明相应的外部ID,因此ORM根据'model_'前缀和对象的技术名称(用下划线代替点)创建其外部ID。由于它们缺乏相应的XML记录,并且不能通过这种方式声明其相应的外部ID,ORM根据'model_'前缀和对象的技术名称(点用下划线代替)创建其外部ID。
这就是为什么引用模型的记录('ir.model'记录)有如下形式:model_XXXXX
其他一些资源的记录也有已知的前缀作为其外部ID。
模块。 https:/github.comodooodooblob8.0openerpmodulesdb.py#L90。
模型。 https:/github.comodooodooblob8.0openerpmodels.py#L382。
字段。 https:/github.comodooodooblob8.0openerpmodels.py#L444。
SELECT * FROM "ir_model_data" WHERE name LIKE 'module_%'; -- most are 'ir.module.module' records
SELECT * FROM "ir_model_data" WHERE name LIKE 'model_%' ORDER by module, name; -- all/most are 'ir.model' records
SELECT * FROM "ir_model_data" WHERE name LIKE 'field_%' ORDER BY module, name; -- all/most are 'ir.model.fields' records
其他资源的记录可能遵循某种惯例,也可能根本不遵循。
SELECT * FROM "ir_model_data" WHERE name LIKE 'view_%' ORDER by module, name; -- all/most are 'ir.ui.view' records
SELECT * FROM "ir_model_data" WHERE model LIKE 'ir.ui.view' AND name NOT LIKE 'view_%' ORDER by module, name; -- 'ir.ui.view' records with unconventional names
所以,在你的情况下,你要找的行是:
<field name="model_id" eval="ref('your_module.model_my_new_model')"/>