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

  • 相关阅读:
    Docker简介
    分类技术
    龙果支付系统
    [徐培成系列实战课程]docker篇
    高手速成android开源项目【developer篇】
    高手速成android开源项目【项目篇】
    高手速成android开源项目【tool篇】
    高手速成android开源项目【View篇】
    JAVA代理分析
    程序员的2013回顾及2014钱途
  • 原文地址:https://www.cnblogs.com/toby2chen/p/5177145.html
Copyright © 2011-2022 走看看