使用表达式设置值
定义字段值的更精细的替代方法是eval
属性。它评估一个Python表达式并将结果值分配给字段。
该表达式在除了Python内置函数之外还有一些在其他标识符的上下文中求值。
要处理日期,可以使用以下模块:time,datetime,timedelta和relativedelta。
例如,要将值设置为昨天,我们将使用:
1 | <field name="date_deadline" |
我们以前使用过它来设置user_id
的值:
1 | <field name="user_id" eval="ref('base.group_user')" /> |
设置字段值的关系
知道如何使用eval
属性和ref()
函数在多对一关系字段(如user_id
)上设置值。但是有一个更简单的方法。
<field>
元素还有一个ref
属性,用于使用外部标识符设置many2one字段的值。有了这个,我们可以设置user_id
的值:
1 | <field name="user_id" ref="base.user_demo" /> |
对于一对多和多对多字段,需要相关ID的列表,因此需要不同的语法;
Odoo提供了一种特殊的语法来写这种类型的字段。
以下示例取自Fleet官方应用程序,替换了tag_ids
字段的相关记录列表:
1 | <field name="tag_ids" |
要在一对多字段上写,我们使用三元组列表。 每个三元组是一个写命令,根据所使用的代码执行不同的事情:
- (0,_ ,{‘field’: value}) 创建一个新记录并将其链接到此记录
- (1,id,{‘field’: value}) 更新已链接记录上的值
- (2,id,_) 取消链接并删除相关记录
- (3,id,_) 取消链接但不删除相关记录
- (4,id,_) 链接已存在的记录
- (5,,) 取消链接,但不会删除所有链接的记录
- (6,_,[ids]) 使用提供的列表替换链接记录的列表
前面列表中使用的下划线符号表示不相关的值,通常填充为0或False。
常用模型的快捷元素
在xml文件中除了<record>
的元素,还有如<act_window>
和<menuitem>
元素。
作为参考,下列快捷元素可与他们加载数据的相应模型一起使用:
<act_window>
是窗口操作模型,ir.actions.act_window
<menuitem>
是菜单项模型,ir.ui.menu
<report>
是报告行动模型,ir.actions.report.xml
<template>
是存储在ir.ui.view
模型的QWeb模板
<URL>
是统一资源定位行为模型,ir.actions.act_URL