---------------------
更新时间:
11:06 2016-09-27 星期二
18:06 2016-09-18 星期日
10:31 2016-03-01 星期二
---------------------
* 方法和修饰器
    api是命名修饰器,识别 cr,cursor, uid, user, user_id, id, ids, context
   
    # @api.returns
      返回指定模型的记录集
        @api.returns('res.partner')
        def afun(self):
            ...
            return x  # a RecordSet
           
        这样就返回合作伙伴记录集
          当老的方式进行调用,会自动返回成 ids 列表,而不是记录集
       
    # @api.one
      返回当前记录,指明下面self是一条记录
        @api.one
        def afun(self):
            self.name = 'toto'
           自动循环记录集,给出记录给你操作,但不支持button的action对
           应的方法,是要用@api.multi 和 self.ensure_one() 来代替
           
    # @api.multi
       返回记录集,指明下面的self是记录集
        @api.multi
        def afun(self):
            len(self)
           
    # @api.model
       保证兼容版本,指明下面的self是模型对象
        @api.model
        def afun(self):
            pass
           
    # @api.constrains
        保证关系时的约束
        @api.one
        @api.constrains('name', 'description')
        def _check_description(self):
            if self.name == self.description:
                raise ValidationError("Fields name and description must be different")
       
    # @api.depends
        @api.one
        @api.depends('partner_id.name', 'partner_id.is_company')
        def _compute_pname(self):
            if self.partner_id.is_company:
                self.pname = (self.partner_id.name or "").upper()
            else:
                self.pname = self.partner_id.name
          指定依赖,只要指定的字段发生变化,对应的会用方法重新计算
           
           
    # @api.onchange
        监控字段的变化,然后操作响应
        @api.onchange('fieldx')
        def do_stuff(self): #就这个特别self 是记录,不是记录集
           if self.fieldx == x:
              self.fieldy = 'toto'
        只支持简单字段
            和@api.depends 最大的不同是,它在表单里面改变数据时,对应的字段
            发生改变,但只会把结果暂放在缓存中,没会直接改变到数据库,只有提交
            了表单过后,才会改变数据表中的数据

(17)odoo方法和修饰器的更多相关文章

  1. python使用内置方法和修饰器方法获取类名、函数名

    1. 外部获取 从外部的情况好获取,可以使用指向函数的对象,然后用__name__属性. def a(): pass a.__name__ 或者 getattr(a,'__name__') 2. 内部 ...

  2. python设计模式之修饰器模式

    python设计模式之修饰器模式 无论何时我们想对一个对象添加额外的功能,都有下面这些不同的可选方法. [ ] 如果合理,可以直接将功能添加到对象所属的类(例如,添加一个新的方法) [ ] 使用组合 ...

  3. ES6 Decorator 修饰器

    目的:  修改类的一种方法,修饰器是一个函数 编译: 安装 babel-plugin-transform-decortators-legacy .babelrd      plugins: [&quo ...

  4. 修饰器Decorator

    类的修饰 许多面向对象的语言都有修饰器(Decorator)函数,用来修改类的行为.目前,有一个提案将这项功能,引入了 ECMAScript. @testable class MyTestableCl ...

  5. es6 Decorator修饰器

    1.类的修饰: 修饰器(Decorator)函数,用来修改类的行为.修饰器是一个对类进行处理的函数.修饰器函数的第一个参数,就是所要修饰的目标类. @testable class MyTestable ...

  6. ES6入门六:class的基本语法、继承、私有与静态属性、修饰器

    基本语法 继承 私有属性与方法.静态属性与方法 修饰器(Decorator) 一.基本语法 class Grammar{ constructor(name,age){ //定义对象自身的方法和属性 t ...

  7. Python修饰器

    Python的修饰器的英文名叫Decorator,当你看到这个英文名的时候,你可能会把其跟Design Pattern里的Decorator搞混了,其实这是完全不同的两个东西.虽然好像,他们要干的事都 ...

  8. Python 从零学起(纯基础) 笔记 之 迭代器、生成器和修饰器

    Python的迭代器. 生成器和修饰器 1. 迭代器是访问集合元素的一种方式,从第一个到最后,只许前进不许后退. 优点:不要求事先准备好整个迭代过程中的所有元素,仅仅在迭代到某个元素时才计算该元素,而 ...

  9. Laravel 5.1 文档攻略 —— Eloquent: 读取器和修饰器

    date_range 8月前 tag_faces Woody remove_red_eye 1483 chat0 简介 这一章其实很简单,Model的属性不是和数据表的字段一一对应吗? 那么在存储和呈 ...

随机推荐

  1. Utility

    #region Tools public static string ForMatDateTime(DateTime dt, string formatStr) { return string.For ...

  2. ubuntu中rar与unrar用法详解

    本文转载:http://helloklzs.iteye.com/blog/1139993 安装: sudo apt-get install rar 这样就可以安装了 删除是以下语句 sudo apt- ...

  3. Makefile文件简单整理

    .PHONY:clean main:hello.o gcc -o main hello.c hello.o:hello.c gcc -c hello.c clean: rm -f hello.o ma ...

  4. [SAP ABAP开发技术总结]动态语句、动态程序

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  5. 第一发。。。codeforces 609 C Load Balancing 贪心

    /*题意:给你一个序列经过最小变换,变换一次为一个数+1,一个数-1,使得最大值与最小值相差1:思路:与最后得到的序列相差的sum/2:*/#include<iostream> #incl ...

  6. 《FLASH CC 2015 CANVAS 中文教程》——1、导出canvas动画,文件结构浅析

    注::如果你对 FLASH 这个软件操作不够熟悉,建议你可以先看看FLASH动画之类的书. :FLASH CC 在文中直接简称为CC. :以下所以文章中所说的快捷键 如果你按了不起作用,请检查是否有其 ...

  7. Linux中变量#,@,0,1,2,*,$$,$?的含义

    $# 是传给脚本的参数个数 $ 是脚本本身的名字 $ 是传递给该shell脚本的第一个参数 $ 是传递给该shell脚本的第二个参数 $@ 是传给脚本的所有参数的列表 $* 是以一个单字符串显示所有向 ...

  8. iOS - Swift Struct 结构体

    1.Struct 的创建 1.1 基本定义 结构体的定义 // 定义结构体数据类型 struct BookInfo { // 每个属性变量都必须初始化 var ID:Int = 0 var Name: ...

  9. java实现将资源文件转化成sql语句导入数据库

    文档结构

  10. 关于远程连接MySQL数据库的问题解决

    安装MySQL sudo apt-get install mysql-server 这个应该很简单了,而且我觉得大家在安装方面也没什么太大问题,所以也就不多说了,下面我们来讲讲配置. 配置MySQL ...