Data Files
Odoo是数据驱动的,因此模块定义的很大一部分是它管理的各种记录的定义:UI(菜单和视图),安全性(访问权限和访问规则),报告和普通数据都是通过记录定义的。
结构(Structure)
在Odoo中定义数据的主要方法是通过XML数据文件:XML数据文件的广泛结构如下:
- 任意数量的操作元素都包含在根元素odoo中
<!-- the root elements of the data file -->
<odoo>
<operation/>
...
</odoo>
数据文件是按顺序执行的,操作只能引用前面定义的操作的结果
核心操作(Core operations)
record
record
适当地定义或更新数据库记录,它具有以下属性:
model
(required)
创建(或更新)模型的名称
id
这个记录的外部标识符。强烈建议提供一个
- 对于记录创建,允许随后的定义修改或引用该记录
- 对于记录修改,修改的记录
context
创建记录时使用的context
forcecreate
在更新模式下,是否应该创建记录,如果它不存在
需要一个外部id,默认为True。
field
每个记录可以由field
标记组成,定义在创建记录时设定的值。没有field
的record
将使用所有默认值(创建)或什么都不做(更新)。
一个field
有一个强制性的name
属性,要设置的字段的名称,以及定义值本身的各种方法:
Nothing
如果该字段没有提供任何值,则在字段中设置隐式False。可以用来清除字段,或者避免使用字段的默认值。
search
对于关系字段,应该是字段模型上的域。
将对域进行评估,使用它搜索字段的模型,并将搜索结果设置为字段的值。只有当字段是Many2one
时才会使用第一个结果
ref
如果提供了ref
属性,它的值必须是一个有效的外部id,它将被查找并设置为字段的值。
主要是为Many2one
和Reference
字段。
type
如果提供了type
属性,它将用于解释和转换字段的内容。该字段的内容可以通过使用file
属性的外部文件或通过节点的body来提供。
可用的类型如下:
xml
、html
提取字段的子field
作为单个文档,评估包含表单%(external_id)s
.%%
指定的任何external id可以用来输出实际的%符号。
file
确保field内容在当前模型中是一个有效的文件路径,保存成对的module,path
作为字段值
char
将字段内容直接设置为字段的值,无需修改
base64
base64编码了字段的内容,与file属性相结合,将图像数据加载到附件中
int
将字段的内容转换为整数并将其设置为字段的值
float
将字段的内容转换为浮点数并将其设置为字段的值
list
、tuple
应该包含任意数量的value
元素,具有与field
相同的属性,每个元素都解析为一个生成的tuple或list的项目,生成的收藏品被设置为字段的值
eval
对于以前的方法不合适的情况,eval
属性简单地评估它所提供的Python表达式,并将结果设置为字段的值。
评估context包含的各种模块(time, datetime, timedelta, relativedelta
),在适用的情况下(obj)为当前字段解析外部标识符(ref)和模型对象的函数
delete
delete
标签可以删除以前定义的任意数量的记录。它具有以下属性:
model
(required)
指定记录应该被删除的模型
id
要删除记录的外部id
search
一个domain
来查找要删除模型的记录
id
和search
是专有的
function
function
标签在模型上调用一个方法,并提供了参数。它有两个强制参数model
和name
,分别指定了要调用的方法的模型和名称。
参数可以使用eval
(应该对调用该方法的一系列参数进行评估)或value
元素(见list
值)。
Shortcuts
由于Odoo的一些重要结构模型很复杂且涉及,因此数据文件提供了使用记录标记定义它们的更短替代方法:
menuitem
定义了一个ir.ui.menu
记录有许多默认值和后退:
Parent menu
- 如果设置了父属性,则它应该是另一个菜单项的外部id,用作新项的父项
- 如果未提供父级,则尝试将name属性解释为/ -separated菜单名称序列,并在菜单层次结构中查找位置。 在该解释中,自动创建中间菜单
- 否则菜单被定义为“顶级”菜单项(不是没有父项的菜单)
Menu name
如果未指定name
属性,则尝试从链接的操作中获取菜单名称(如果有)。 否则使用记录的id
Groups
groups
属性被解释为res.groups
模型的逗号分隔的外部标识符序列。 如果外部标识符以减号( -
)为前缀,则该组将从菜单的组中删除
action
如果指定的话,action
属性应该是在菜单打开时执行的动作的外部id
id
菜单项的外部id
template
创建一个只需要视图的arch
部分的QWeb view,并允许一些可选属性:
name
, inherit_id
, priority
与ir.ui.view
上的相应字段相同(nb:inherit_id
应该是外部标识符)
primary
如果设置为True
并与inherit_id
结合,则将视图定义为主要视图
groups
以逗号分隔的组外部标识符列表
page
如果设置为“True”
,则模板为网站页面(可链接,可删除)
optional
enabled
还是disabled
,是否可以禁用视图(在网站界面中)及其默认状态。 如果未设置,则始终启用视图。
CSV data files
XML数据文件具有灵活性和自描述性,但在批量创建同一模型的大量简单记录时非常冗长。
对于这种情况,数据文件也可以使用csv,这通常是访问权限的情况:
- 文件名是
model_name.csv
- 第一行列出要写入的字段,外部标识符的特殊字段ID(用于创建或更新)
- 之后每行创建一个新记录
这是定义美国州res.country.state.csv
的数据文件的第一行
"id","country_id:id","name","code"
state_au_1,au,"Australian Capital Territory","ACT"
state_au_2,au,"New South Wales","NSW"
state_au_3,au,"Northern Territory","NT"
state_au_4,au,"Queensland","QLD"
state_au_5,au,"South Australia","SA"
state_au_6,au,"Tasmania","TAS"
state_au_7,au,"Victoria","VIC"
state_au_8,au,"Western Australia","WA"
state_us_1,us,"Alabama","AL"
state_us_2,us,"Alaska","AK"
state_us_3,us,"Arizona","AZ"
state_us_4,us,"Arkansas","AR"
state_us_5,us,"California","CA"
state_us_6,us,"Colorado","CO"
以更易读的格式呈现:
对于每一行(记录):
- 第一列是要创建或更新的记录的外部标识
- 第二列是要链接到的国家/地区对象的外部ID(必须事先定义国家/地区对象)
- 第三列是
res.country.state
的name
字段 - 第四列是
res.country.state
的code
字段