Navigation

    Odoo 中文社区

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • Popular
    • Users
    • Groups

    Odoo中文社区可以通过以下两个域名访问:shine-it.net , odoo.net.cn

    由于系统升迁的原因,本论坛部分较早期的内容存在格式和链接损坏失效的问题,并非本论坛系统本身的缺陷,望谅解

    本社区没有维护任何QQ群讨论组,任何与本社区同名的QQ群讨论组的言论与本社区无关!

    开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

    如果您登录系统碰到问题,请在微信公众号留言:

    odoo 中 |= 是什么意思

    Odoo 新手求助
    4
    8
    3926
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • 火
      火灬炎灬焱灬燚 last edited by

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

      1 Reply Last reply Reply Quote 0
      • digitalsatori
        digitalsatori 管理员 last edited by

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

        即:集合的或操作

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

        1 Reply Last reply Reply Quote 0
        • 火
          火灬炎灬焱灬燚 last edited by

          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 Reply Last reply Reply Quote 0
          • digitalsatori
            digitalsatori 管理员 last edited by

            都是recordSet, recordSet的子集也是recordSet

            1 Reply Last reply Reply Quote 0
            • 火
              火灬炎灬焱灬燚 last edited by

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

              Felix_Cheng 1 Reply Last reply Reply Quote 0
              • 卓忆
                卓忆 last edited by

                东莞-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 Reply Last reply Reply Quote 0
                • digitalsatori
                  digitalsatori 管理员 last edited by 卓忆

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

                  1 Reply Last reply Reply Quote 0
                  • Felix_Cheng
                    Felix_Cheng @火灬炎灬焱灬燚 last edited by Felix_Cheng

                    @火灬炎灬焱灬燚

                    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),自然而然两个能进行 |=

                    1 Reply Last reply Reply Quote 0
                    • First post
                      Last post