Odoo @api.* 装饰器

2019/8/19 odooapi

# @api.one

one的用法主要用于self为单一记录的情况,self仅代表当前正在操作的记录。

# @api.multi

multi则指self是多个记录的合集。因此,常使用for—in语句遍历self。 multi通常用于:在tree视图中点选多条记录,然后执行某方法,那么那个方法必须用@api.multi修饰,而参数中的self则代表选中的多条记录。 如果仅仅是在form视图下操作,那么self中通常只有当前正在操作的记录。

# @api.model

此时的self仅代表模型本身,不含任何记录信息。

# @api.contrains

在保存时对字段进行约束。 抛出异常不能保存

# @api.depends('xxx')

使用compute参数计算字段时。它必须将计算值分配给字段。
如果它使用其他字段的值,则应使用@api.depends()指定这些字段

# @api.onchange:动态更新UI

@api.onchange('demo')
def onchange_demo(self):
    # 循环多条记录
    for rec in self:
        # 判断字段是否存在
        if rec.demo:
            if rec.demo < 0:
                # 弱提醒
                return {'warning': {'title': "title", 'message': "message"}}

当用户更改表单中的字段值(但尚未保存表单)时,根据该值自动更新其他字段可能很有用, 计算字段会自动检查并重新计算,它们不需要 onchange 对于非计算字段,onchange()装饰器用于提供新的字段值: 可以通过on_change="0"在视图中添加来禁止来自特定字段的触发器 :

<field name ="name" on_change ="0"/>

警告: one2many或many2manyfield 不可能通过onchange修改自身

# @api.returns

returns的用法主要是用来指定返回值的格式,它接受三个参数:
第一个为返回值的model 第二个为向下兼容的method 第三个为向上兼容的method