odoo文件相关操作
基于odoo 12.0
外部ID
外部ID也成为XML ID,是一个字符串,数据库表中的唯一标识,在记录产生时创建,实质为数据库表记录的ID和别名,odoo在数据文件中定义的记录使用的是外部ID,这样做可以避免升级模块时重复创造记录(外部ID的唯一性)。
可以在 设置->序列与标识符->外部标识 页面搜索外部ID。
模型中的字段的外部通常为:模块名.field_模型名_字段名
注:外部ID只允许有一个 .
视图中查找外部ID的方法:打开开发者模式,使用debug按钮(页面右上角账户按钮左边一个像蜘蛛的按钮)中查看元数据选项,选择按钮中的编辑视图or编辑搜索视图等选项,就可以看到视图相关的外部ID。
导入导出数据
odoo支持导出数据,在列表视图上的动作按钮下拉框中选择导出项:导出可以选择EXCEL和CSV两种格式,需要导出的字段可以在菜单中进行选择。
导入数据需要确认导入功能是否已开启(默认可创建为开启),在创建按钮旁有一个导入按钮,导入页面下方有数据的预览,包括编码、格式、字段映射等。
特殊字段的导入需要不同的处理方式:
- many2many:通常代表一条数据记录可以关联另一个模型的多条记录。处理时应用逗号(,)隔开,可以写为多个外部ID
id tag_id/id product.product tag.tag1,tag.tag2 - one2many: 处理方法又有所不同,通常采用父子记录的方式:
id tag_id/id product.product tag.tag1 tag.tag2 tag.tag3
模块数据
- 演示数据
演示数据一般同样采用csv文件,存放于demo文件下,并且在__manifest__.py文件中将路径添加到demo列表中,需要演示数据时,应用会自动加载。 - xml数据文件
在xml文件中加载数据(通常在data文件夹中),使用<record>标签来加载字段,字段使用<field>标签
<record>
…
<filed name=""/>
…
</record>
几种重要的用法:
-
noupdate属性:一般写在xml文件中的<odoo>或者<data>标签中,默认值为0,设为1表示后续更新应用不会再次加载该数据。一般用于初始化
-
字段表达式:通过eval属性引入python表达式:
<field name="user_id" eval="ref('base.group_user')" />
这里是many2one字段的赋值表达式,将记录中的user_id赋值为组成员,ref()函数为通过外部ID查找模型记录的函数
如果是one2many或者many,同样采用eval引入,表达式可分为多种:(0,_,{'field':value}) #创建一条新的记录,并关联到本记录中,字典内可含有多个键对值 (1,id,{'field':value}) #更新已在关联记录字段上的值 (2,id,_) #断开并删除关联记录 (3,id,_) #断开但不删除关联记录 (4,id,_) #关联已存在的记录 (5,_,_) #断开但不删除记录,用于原来关联的是多条记录 (6,_,[ids])#用列表中的id,替换原来的关联记录
-
模型的快捷使用:通过缩写引用模型
<act_window> ir.actions.act_window <menuitem> ir.ui.menu <report> ir.actions.report.xml <template> ir.ui.view
-
XML数据内的其他操作
- 删除:<delete>
- 触发函数 :<function model="" name="" eval="" />
- 修改:重写记录