跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(Flatly)
  • 不使用皮肤
折叠

Odoo 中文社区

  1. 主页
  2. 版块
  3. Odoo 开发与实施交流
  4. 新api的one和multi有什么区别?

新api的one和multi有什么区别?

已定时 已固定 已锁定 已移动 Odoo 开发与实施交流
7 帖子 5 发布者 3.6k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • D 离线
    D 离线
    dwz35296
    写于 最后由 编辑
    #1

    近段时间在研究新api,不过对于新api的一些装饰器的用途不是很清楚。
    例如,@api.one和@api.multi有什么区别?

    1 条回复 最后回复
    0
    • mrshellyM 离线
      mrshellyM 离线
      mrshelly
      写于 最后由 编辑
      #2

      @api.one 表示勒是一个针对单记录而写的.
      @api.multi 表示勒是一个针对多条记录处理而写的.

      1 条回复 最后回复
      0
      • JoshuaJ 离线
        JoshuaJ 离线
        Joshua 管理员
        写于 最后由 编辑
        #3

        [quote author=mrshelly link=topic=17330.msg31141#msg31141 date=1444810982]
        @api.one 表示勒是一个针对单记录而写的.
        @api.multi 表示勒是一个针对多条记录处理而写的.

        [/quote]

        如上,@api.one 的self是单条纪录,如果传入的是一个list他会循环执行。@api.multi的self是多条纪录。
        然后注意的是 @api.one的最终返回结果是会把每次执行的结果合并成为一个list再返回。

        【上海先安科技】(joshua AT openerp.cn),欢迎关注公众号:openerp_cn

        1 条回复 最后回复
        0
        • D 离线
          D 离线
          dwz35296
          写于 最后由 编辑
          #4

          很好,清楚明白。感谢楼上两位的回复

          1 条回复 最后回复
          0
          • wjfonhandW 离线
            wjfonhandW 离线
            wjfonhand
            写于 最后由 编辑
            #5

            @api.one的最终返回结果是会把每次执行的结果合并成为一个list再返回。

            这句不太懂,举个栗子?

            GoodERP -- Odoo China fork

            1 条回复 最后回复
            0
            • V 离线
              V 离线
              vnsoft
              写于 最后由 编辑
              #6

              [quote author=Jeff link=topic=17330.msg31153#msg31153 date=1444916784]
              @api.one的最终返回结果是会把每次执行的结果合并成为一个list再返回。

              这句不太懂,举个栗子?
              [/quote]

              我理解的应该是这样子的。假如有一个方法定义:
              def test(self,cr,uid,ids,context=None):
                  print ids
                  return ids*2

              如果前加的是@api.one,并且ids参数转入的是[1,2,3]的话,这个方法会执行三次,依次输出的ids是:
              >>>1
              >>>2
              >>>3
              虽然执行了三次,但对其它调用该方法的地方来说,不可能需要接收三个返回值,所以它就把这多个返回值合并成了一个list返回,这里的结果应该是[2,4,6]

              如果前面加的是@api.multi,那就好理解了,方法只执行一次,输出的结果也只有一次,是[1,2,3],返回值是[1,2,3,1,2,3]

              1 条回复 最后回复
              0

              • 登录

              • 没有帐号? 注册

              • 登录或注册以进行搜索。
              • 第一个帖子
                最后一个帖子
              0
              • 版块
              • 标签
              • 热门
              • 用户
              • 群组