跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • 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. odoo 中 |= 是什么意思

odoo 中 |= 是什么意思

已定时 已固定 已锁定 已移动 Odoo 新手求助
8 帖子 4 发布者 4.7k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 火 离线
    火 离线
    火灬炎灬焱灬燚
    写于 最后由 编辑
    #1

    最近在研究 odoo 源码时遇到了一个问题,在 odoo 中 |= 是什么意思啊

    1 条回复 最后回复
    0
    • digitalsatoriD 离线
      digitalsatoriD 离线
      digitalsatori 管理员
      写于 最后由 编辑
      #2

      这是集合操作符号:
      SetA |= SetB 等同于 SetA = SetA | SetB

      即:集合的或操作

      Odoo中的RecordSet也是集合的概念,所以可以使用集合操作符

      【上海先安科技】(tony AT openerp.cn)

      1 条回复 最后回复
      0
      • 火 离线
        火 离线
        火灬炎灬焱灬燚
        写于 最后由 编辑
        #3

        move_waiting = self.env['stock.move']

            for move in self:
                if move.move_orig_ids:
                    move_waiting |= move
        

        这是odoo仓库的部分源码,move_waiting 是recordSet。但是 move 是单条记录,不是 recordset,这两个能进行 |= 吗

        1 条回复 最后回复
        0
        • digitalsatoriD 离线
          digitalsatoriD 离线
          digitalsatori 管理员
          写于 最后由 编辑
          #4

          都是recordSet, recordSet的子集也是recordSet

          【上海先安科技】(tony AT openerp.cn)

          1 条回复 最后回复
          0
          • 火 离线
            火 离线
            火灬炎灬焱灬燚
            写于 最后由 编辑
            #5

            这我可能有点不理解,我原来是做Java的,我站在我这分析下你看对吗。recordSet在Java中可以理解为List,就是move_waiting 是 List,move 是 RecordSet 里的一条记录,那就是 List 里的一条记录。如果是这样的话,List 和另一个 List里的记录不能进行 | 操作吧。你看我这样理解对吗

            Felix_ChengF 1 条回复 最后回复
            0
            • 卓忆卓 离线
              卓忆卓 离线
              卓忆
              写于 最后由 编辑
              #6

              东莞-neter(627785244) 10:10:22
              odoo新api中强调的是recordset,
              什么时候,什么操作如果遵循他的规范都会得到一个recordset,
              只不过这个recordset可能包含一个,或者几个记录,对于有一个记录的可以直接进行属性操作。
              但本质上还是个recordset。所以很绕,一般初次接触的会很容易给搞蒙。
              Rs = env['xxxx'],是个recordset,只不过为空。
              rs = Rs.browse(xxxx),是个recordset。
              rs[0],是个recordset, rs.browse('xxxxx')此时rs也可以像Rs一样browse,
              如果此时你用java的类可以new实例,但是实例不能new实例,
              这就是odoo和java思想的区别。问题的核心在于_browse函数。读懂了就全懂了。

              恬淡

              1 条回复 最后回复
              0
              • digitalsatoriD 离线
                digitalsatoriD 离线
                digitalsatori 管理员
                写于 最后由 卓忆 编辑
                #7

                recordSet并不是列表,而是一个对象,这个对象具有集合(set)的属性。
                简单理解recordSet是列表是不对的。

                【上海先安科技】(tony AT openerp.cn)

                1 条回复 最后回复
                0
                • Felix_ChengF 离线
                  Felix_ChengF 离线
                  Felix_Cheng
                  在 回复了 火灬炎灬焱灬燚 最后由 Felix_Cheng 编辑
                  #8

                  @火灬炎灬焱灬燚

                  Iterating on a recordset will yield new sets of a single record ("singletons"), much like iterating on a Python string yields strings of a single characters.

                  这是odoo文档的原话,她说:“遍历recordset集合得到的是(单记录的set)子集合(还是集合);这非常像 当遍历一个字符串时,每次得到一个(单字符的串)”。所以不管是‘’单字符‘’字符串还是子集合,依然拥有字符串或集合的所有特性。

                  回到你的例子,“ for move in self ”: 遍历了self(recordset集合),move每次得到的是单记录的子集合set,而self也是集合(set),自然而然两个能进行 |=

                  Felix / TriangleERP inc. / QC / CA

                  1 条回复 最后回复
                  0

                  • 登录

                  • 没有帐号? 注册

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