在 XML 中定义记录
在 XML 文件中,每个元素有两个基本属性: id 和 model,并包含为对应列设置的值。 id 属性对应记录外部标识符, model 对应目标模型。 元素有几种分配值的方法,下
面一起来看看
直接为字段设置值
元素的 name 属性标识要写入的字段。写入的值是元素内容: 字段开、闭标签之间的文本。对于 date 和 datetime,带有返回 date 或 datetime 对象表达式的 eval 属性可进行设
置。 返回的” YYYY-mm-dd”和” YYYY-mm-dd HH:MM:SS”字符串会进行转化。对于布尔字段,” 0″ and “False”都会转换成 False,而任意非空值都会转换成 True。
“ 注意: Odoo 10 的修改
Odoo 10 中改进了从数据文件中读取布尔值 False 的方式。在老版本中,包含” 0″ and“False”在内的非空值都会转换成 True,直至 Odoo 9,布尔值仍需使用 eval 属性进行设置,如 eval=” False”。 ”
通过表达式设置值
设置字段值更复杂的方式是通过 eval 属性,它会运行 Python 表达式并将结果分配给字段。
表达式通过 Python 内置的以及一些其它可创建表达式标识符的上下文求值。
可使用如下 Python 模块来处理日期: time, datetime, timedelta 和 relativedelta。通过它们可以计算日期值,在演示和测试数据经常会用到,以让日期和模块安装日期较近。关于 Python模块更多这类知识,请参考官方文档。比如,把值设为前一天,可使用如下代码:
<field name="date_published" eval="(datetime.now() + timedelta(-1))" />
求值上下文还可使用 ref()函数,用于将外部标识符转换为对应的数据库 ID。这可用于为关联字段设置值。比如,可以使用它为 publisher_id 设置值:
<field name="publisher_id" eval="ref('res_partner_packt')" />
在 many-to-one 关联字段上设置值
对于 many-to-one 关联字段,要写入的是关联记录的数据库 ID。在 XML 文件中,我们一般会知道记录的 XML ID,然后就需要把它转换成实际的数据库 ID
一种方式是像前文那样使用带有 ref()函数的 eval 属性。更简单的替代方式是使用在元素中可用的 ref 属性,使用它设置 publisher_id many-to-one 字段的值,我们可以这么写:
<field name="publisher_id" ref="res_partner_packt" />