zoukankan      html  css  js  c++  java
  • (17)odoo方法和修饰器

    ---------------------
    更新时间:
    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 最大的不同是,它在表单里面改变数据时,对应的字段
                发生改变,但只会把结果暂放在缓存中,没会直接改变到数据库,只有提交
                了表单过后,才会改变数据表中的数据         

  • 相关阅读:
    我对闭包的几点初步认识
    python 字符串的split()函数详解
    使用两个不同类型的数据进行加法计算时,使用异常处理语句捕获由于数据类型错误而出现的异常,发生生成错误。是否继续并运行上次的成功生成?
    自定义一个抽象类,用来计算圆的面积
    接口里不能包括字段,构造函数,析构函数,静态成员或常量等,否则会导致错误
    抽象类与抽象方法的使用
    如何设置修改WPS批注上的用户信息名称
    在双击控件进入到程序代码编辑界面后,没写东西不影响运行,但删除后报错
    电影管理系统修改后,为啥不能识别数据库
    添加现有项到当前项目的几点注意事项
  • 原文地址:https://www.cnblogs.com/toby2chen/p/5177145.html
Copyright © 2011-2022 走看看