美文网首页odoo
odoo ORM 方法装饰器

odoo ORM 方法装饰器

作者: 隔壁小红馆 | 来源:发表于2019-12-29 16:42 被阅读0次
  • 记录集方法:@api.multi
    大多数情况下,我们需要一个自定义方法来对记录集执行一些操作。此时就需要使用@api.multi,并且此处self参数就是要操作的记录集。方法的逻辑通常会包含对 self 的遍历。@api.multi是最常用的装饰器。

小贴士:如果模型方法没有添加装饰器,默认就使用@api.multi。

  • 单例记录方法:@api.one
    有些情况下方法用于操作单条记录(单例),此时可使用@api.one装饰器。现在仍可使用@api.one,但在 Odoo 9中已声明为弃用。它包裹装饰的方法,进行 for 循环遍历,它调用装饰方法,一次一条记录,然后返回一个结果列表。因此在@api.one装饰的方法内,self 一定是单例。

小贴士:@api.one的返回值有些搞怪,它返回一个列表,而不实际方法返回的数据结构。比如方法代码如果返回字典,实际返回值是一个字典值列表。这种误导性也是该方法被弃用的主要原因。

对于要操作单条记录的方法,我们应还是使用@api.multi,在代码顶部添加一行self.ensure_one(),来确保操作的是单条记录。

  • 类静态方法:@api.model
    有时方法需要在类级别而不是具体记录上操作。面向对象编程语言中,这称之为静态方法。这些类级别的静态方法应由@api.model装饰。在这些情况下,self 应作为模型的引用 ,无需包含实际记录

@api.model装饰的方法无法用于用户界面按钮,在这种情况下,应使用@api.multi。

  • @api.onchange 方法
    onchange由用户界面表单视图触发,当用户编辑指定字段值时,立即执行一段业务逻辑。这可用于执行验证,向用户显示消息或修改表单中的其它字段。支持该逻辑的方法就使用@api.onchange(‘fld1’, ‘fld2’, …)装饰。装饰器的参数是用户界面通过编辑需触发方法的字段名。

小贴士:通过为字段添加属性on_change=”0″可在特定表单中关闭 on change 行为,比如<field name=”fld1″ on_change=”0″ />

  • 其它模型方法装饰器
    以下装饰器也会经常使用到,它们与模型内部行为有关

1.@api.depends(fld1,…)用于计算字段函数,来识别(重新)计算应触发什么样的修改。必须设置在计算字段值上,否则会报错。
2.@api.constrains(fld1,…)用于模型验证函数并在任意参数中包含的字段修改时执行检查。它不应向数据库写入修改,如检查失败,则抛出异常。

相关文章

  • odoo ORM 方法装饰器

    记录集方法:@api.multi大多数情况下,我们需要一个自定义方法来对记录集执行一些操作。此时就需要使用@api...

  • odoo ORM研究3 - odoo fields常用的字段属性

    之前我们已经讲解了odoo ORM中的一些对字段常用的API操作方法,今天我们继续研究一下Odoo orm中字段的...

  • Odoo的@api.装饰器

    Odoo自带的api装饰器主要有:model,multi,one,constrains,depends,oncha...

  • typescript 五种装饰器

    装饰器类型 装饰器的类型有:类装饰器、访问器装饰器、属性装饰器、方法装饰器、参数装饰器,但是没有函数装饰器(fun...

  • 【odoo二次开发】ORM框架(二、Model方法及api装饰器

    介绍 二开时模型创建完毕并配好视图后对于基本的CRUD操作不需要再在代码中实现,框架会自动提供这些功能,但如果我们...

  • TypeScript装饰器

    前言 装饰器分类 类装饰器 属性装饰器 方法装饰器 参数装饰器需要在tsconfig.json中启用experim...

  • odoo服务器性能调优以及负载均衡

    1 Odoo负载均衡 1.1 Odoo服务器负载均衡 Nginx, odoo服务器做负载均衡,空间换时间 odoo...

  • 类里方法的装饰器

    类的方法的装饰器 方法的装饰器的执行时间也是在类定义之后,立即对类的方法进行装饰修改 方法的装饰器接受3个参数 ...

  • odoo controllers 方法

    在controllers.py中 有装饰器@http.route()这个是对odoo的url进行管理 例如@htt...

  • python装饰器,生成器,迭代器

    装饰器 运用了闭包的原理通过一个@符号将装饰器置于其要装饰的方法的上方可以多个装饰器装饰同一个方法 装饰器可以用可...

网友评论

    本文标题:odoo ORM 方法装饰器

    本文链接:https://www.haomeiwen.com/subject/sqnyoctx.html