装饰器
True

装饰器

Odoo自带的api装饰器主要有:model,multi,one,constrains,depends,onchange,returns 七个装饰器。odoo12添加model_create_multi

 

一、one

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

    @api.one 装饰器在 9.0 被弃用,应该避免再使用。相反,我们应该使用 @api.multi 并在方法代码中添加一条行self.ensure_one(),以确保它是一个单例。

二、multi

    在记录行方式下装饰一个对记录进行操作的方法

    multi则指self是多个记录的合集。因此,常使用for—in语句遍历self。

    multi通常用于:在tree视图中点选多条记录,然后执行某方法,那么那个方法必须用@api.multi修饰,而参数中的self则代表选中的多条记录。

    如果仅仅是在form视图下操作,那么self中通常只有当前正在操作的记录。

已复制

三、model

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

    为保持一致性, self仍然是一个记录集,但它的内容无关。请注意,不能从用户界面中的按钮使用这种类型的方法。

已复制

四、contrains

     字段的代码约束。

已复制

五、depends

    depends 主要用于compute方法,depends就是用来标该方法依赖于哪些字段的。每个参数必须为一个点号分隔的字段名称序列组成的字符串: 

已复制

六、onchange

    onchange的使用方法非常简单,就是当字段发生改变时,触发绑定的函数。

    特别是onchange方法可以向用户界面发送一条警告消息。例如,这可以警告用户刚刚输入的产品数量在库存中是不可用的,而不会阻止用户继续使用。这通过方法返回一个描述警告消息的字典来完成的︰ 

@api.onchange('field1', 'field2') # 当这两个字段值改变时调用该函数
def check_change(self):
    if self.field1 < self.field2:
        self.field3 = True
已复制

警告

@onchange 仅支持简单字段名称,点名称(关系字段中的字段如partner_id.tz)不受支持且会被忽略

七、returns

    returns的用法主要是用来指定返回值的格式,装饰一个约束的检查器。每个参数必须是一个在检查中使用的字段名称

已复制

警告

@constrains仅支持简单的字段名称,点名称(关系字段中的字段如partner_id.customer)不受支持且会被忽略

@constrains 将只在如果装饰方法中声明的字段被包含在create或者write的调用中时被触发。它意味着视图中不存在的字段不会在记录创建过程中触发调用。有必要重写create 来确保约束总是被触发(例如要测试缺少的值)。


odoo12

增加 装饰器 @api.model_create_multi 用于接收 变量字典列表, 而装饰器 @api.model 用于接收 变量字典

例如:

@api.model

def create(self,vals):

...

   

@api.model_create_multi

def create(self,vals_list):

...

   

create() 支持 单个 变量字典,或则 变量字典列表,

例如:

>>>self.create({‘name‘:"Joe"})

res.partner(78)

>>>self.create([{‘name‘:"Jack"},{‘name‘:"William"},{‘name‘:"Averell"}])

res.partner(79,80,81)





9.报表和WebService
True