数据文件¶
Odoo 是一个高度数据驱动的系统,模块定义的一个重要部分是各种记录的定义:UI(菜单和视图)、安全性(访问权限和记录规则)、报告和普通数据都是通过记录来定义的。
结构¶
在Odoo中定义数据的主要方式是通过XML数据文件:XML数据文件的大体结构如下:
根元素
odoo
内的任意数量的操作元素
<?xml version="1.0" encoding="UTF-8"?>
<!-- the root elements of the data file -->
<odoo>
<operation/>
...
</odoo>
数据文件按顺序执行,操作只能引用先前定义操作的结果
注解
如果数据文件的内容只需要应用一次,您可以指定odoo标志 noupdate
设置为1。如果文件中的部分数据只需要应用一次,您可以将文件的这部分放置在<data noupdate=”1”>域中。
<odoo>
<data noupdate="1">
<!-- Only loaded when installing the module (odoo-bin -i module) -->
<operation/>
</data>
<!-- (Re)Loaded at install and update (odoo-bin -i/-u) -->
<operation/>
</odoo>
核心操作¶
record
¶
record
appropriately defines or updates a database record, it has the
following attributes:
model
(required)要创建(或更新)的模型名称
id
此记录的 外部标识符。强烈建议提供一个
对于记录的创建,允许后续的定义修改或引用此记录
用于记录修改,要修改的记录
context
创建记录时要使用的上下文
forcecreate
在更新模式下,如果记录不存在,是否应该创建记录
需要一个 外部 ID,默认为
True
。
field
¶
每个记录可以由 field
标签组成,用于定义在创建记录时要设置的值。没有 field
的 record
将使用所有默认值(创建)或不执行任何操作(更新)。
A field
has a mandatory name
attribute, the name of the field to set,
and various methods to define the value itself:
- 无
如果没有为字段提供值,则字段上将设置一个隐式的
False
。可用于清除字段或避免使用字段的默认值。search
-
将评估域,使用它搜索字段的模型,并将搜索结果设置为字段的值。如果字段是
Many2one
,则只使用第一个结果 ref
如果提供了
ref
属性,则其值必须是一个有效的 外部标识符 ,将被查找并设置为字段的值。type
如果提供了
type
属性,则用于解释和转换字段的内容。可以通过file
属性或节点正文提供字段的内容。可用类型为:
xml
,html
提取
field
的子项作为一个单独的文档,评估任何使用形式%(external_id)s
指定的 外部 ID。可以使用%%
输出实际的 % 符号。file
确保字段内容是当前模型中的有效文件路径,将
module,path
作为字段值保存char
直接将字段内容设置为字段的值,不进行修改
base64
base64 - 对字段的内容进行base64_编码,与
file
attribute 结合使用,可将图像数据加载到附件中int
将字段的内容转换为整数并将其设置为字段的值
float
将字段内容转换为浮点数并将其设置为字段的值
list
,tuple
应该包含任意数量的
value
元素,具有与field
相同的属性,每个元素解析为生成的元组或列表的项,并将生成的集合设置为字段的值
eval
对于前面的方法不适用的情况,
eval
属性会简单地评估提供的任何 Python 表达式,并将结果设置为字段的值。The evaluation context contains various modules (
time
,datetime
,timedelta
,relativedelta
), a function to resolve external identifiers (ref
) and the model object for the current field if applicable (obj
)
delete
¶
The delete
tag can remove any number of records previously defined. It
has the following attributes:
model
(required)应删除指定记录的模型
id
要删除的记录的 外部 ID
search
a domain to find records of the model to remove
id
和 search
是互斥的
function
¶
The function
tag calls a method on a model, with provided parameters.
It has two mandatory parameters model
and name
specifying respectively
the model and the name of the method to call.
可以使用 eval
(应该计算为要调用方法的参数序列)或 value
元素(请参见 list
值)来提供参数。
<odoo>
<data noupdate="1">
<record id="partner_1" model="res.partner">
<field name="name">Odude</field>
</record>
<function model="res.partner" name="send_inscription_notice"
eval="[[ref('partner_1'), ref('partner_2')]]"/>
<function model="res.users" name="send_vip_inscription_notice">
<function eval="[[('vip','=',True)]]" model="res.partner" name="search"/>
</function>
</data>
<record id="model_form_view" model="ir.ui.view">
...
</record>
</odoo>
快捷方式¶
因为Odoo的一些重要结构模型复杂且涉及广泛,数据文件提供了使用 record tags 定义它们的更短的替代方式:
template
¶
Creates a QWeb view requiring only the arch
section of the view, and allowing a few optional attributes:
CSV数据文件¶
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:标识符 |
名称 |
代码 |
---|---|---|---|
state_au_1 |
au |
澳大利亚首都领地 |
ACT |
state_au_2 |
au |
新南威尔士州 |
NSW |
state_au_3 |
au |
北领地 |
NT |
state_au_4 |
au |
昆士兰州 |
QLD |
state_au_5 |
au |
南澳大利亚州 |
SA |
state_au_6 |
au |
塔斯马尼亚州 |
TAS |
state_au_7 |
au |
维多利亚州 |
VIC |
state_au_8 |
au |
西澳大利亚州 |
WA |
state_us_1 |
美国 |
阿拉巴马州 |
AL |
state_us_2 |
美国 |
阿拉斯加州 |
AK |
state_us_3 |
美国 |
亚利桑那州 |
AZ |
state_us_4 |
美国 |
阿肯色州 |
AR |
state_us_5 |
美国 |
加利福尼亚州 |
加州 |
state_us_6 |
美国 |
科罗拉多州 |
CO |
对于每一行(记录):
第一列是要创建或更新的记录的 外部 ID
第二列是要链接到的国家对象的 :term:`外部 ID`(国家对象必须事先定义好)
第三列是
res.country.state
的name
字段第四列是
code
字段,用于res.country.state