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

  • 相关阅读:
    Android使用百度地图定位并显示手机位置后使用前置摄像头“偷拍”
    JS传递参数时对中文进行编码和解码
    点击<a>标签,禁止页面自动跳到顶部的解决办法
    百度地图API用法(传地址)
    asp.net页面按Enter键IE不提交表单
    asp.net同时调用JS和后台的无效的解决
    QQ浏览器不支持JS问题
    html中opacity的使用
    c#中传递参数前加out
    IE下使用jquery ajax失效
  • 原文地址:https://www.cnblogs.com/toby2chen/p/5177145.html
Copyright © 2011-2022 走看看