Odoo 中文社区

    • 注册
    • 登录
    • 搜索
    • 版块
    • 标签
    • 热门
    • 用户
    • 群组

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

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

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

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

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

    关于 parent_left, parent_right

    Odoo 开发与实施交流
    6
    9
    8672
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • C
      ccdos 最后由 编辑

      南京-ccdos(1431494)  22:04:54
      parent_left 或者right?

      我至今没搞懂
      前些天 问了一下,没回应
      上海-空无一人(2158691)  22:05:07
      我也在看。。。
      苏州-秋风流云(154363268)  22:05:13
        <record model="ir.actions.act_window" id="action_ziyuan_allfdcrm">
              <field name="name">所有客户资源</field>
              <field name="res_model">ziyuan.fdcrm</field>
              <field name="domain">[('state','!=','draft'),('x_fuzr.parent_id.user_id','=',uid)]</field>
          </record>
      南京-ccdos(1431494)  22:05:26
      关键也没列子
      深圳-老刘(15251908)  22:11:28
      这个不算嵌套,只是 多了几个条件
      上海-空无一人(2158691)  22:13:18
      所以刚刚那个该怎么写呢 找出当前hr.employee所属department的直接上级department下面所有的hr.employee.
      这个domain要怎么写。。。
      南京-ccdos(1431494)  22:15:22
      “department”,“ child of”,"userid .id.department.parent"
      上海-空无一人(2158691)  22:17:21
      谢谢 我试试看
      广州-步科(17779104)  22:22:24
      parent_left parent_right 是用来计算子节点,避免递归

      如 product.category 的定义:
          _columns = {
              'name': fields.char('Name', size=64, required=True, translate=True, select=True),
              'complete_name': fields.function(_name_get_fnc, type="char", string='Name'),
              'parent_id': fields.many2one('product.category','Parent Category', select=True, ondelete='cascade'),
              'child_id': fields.one2many('product.category', 'parent_id', string='Child Categories'),
              'sequence': fields.integer('Sequence', select=True, help="Gives the sequence order when displaying a list of product categories."),
              'type': fields.selection([('view','View'), ('normal','Normal')], 'Category Type', help="A category of the view type is a virtual category that can be used as the parent of another category to create a hierarchical structure."),
              'parent_left': fields.integer('Left Parent', select=1),
              'parent_right': fields.integer('Right Parent', select=1),
          }
      南京-ccdos(1431494)  22:23:39
      谢谢步科

      我不明白的是,parent_left parent_right 还是  domain 的一个 运算符,就搞不懂了
      广州-步科(17779104)  22:23:45
      假如没有parent_left 和parent_right ,读子节点必须通过 parent_id 递归计算
      有parent_left parent_right之后,计算就非常简单
      如有以下记录结构:
          Customers (1, 10)
              Consumers (2, 3)
              Partners (4, 9)
                  Basic Partners (5, 6)
                  Gold Partners (7, 😎
          Suppliers (11, 12)

      广州-步科(17779104)  22:24:58
      加入要读 Customers  的子节点:
      SELECT id FROM partner_category
          WHERE parent_left > 1 AND parent_left < 10
      这样就可以了
      parent_left  和 parent_right 中在domain 使用也是同样道理
      上海-空无一人(2158691)  22:25:28
      1, 10 在这里是什么意思?
      广州-步科(17779104)  22:25:47
          Customers (1, 10)  第一个是left 第二个是 right

      深圳-老刘(15251908)  22:26:06
      看懂了,左右边界
      南京-ccdos(1431494)  22:26:09
      下级 节点的范围
      上海-空无一人(2158691)  22:26:46
      范围是事先定义好的?
      还是动态变化的?
      广州-步科(17779104)  22:26:54
      其实 parent_left 和parent_right 避免递归的话,把计算压力提前了,在创建和删除记录会重新计算
      南京-ccdos(1431494)  22:26:58
      插入时 计算
      广州-步科(17779104)  22:27:24
      以空间换时间,很经典的思路
      上海-空无一人(2158691)  22:28:28
      那left和right的区别是什么?
      有一个不就能搞定了么
      广州-步科(17779104)  22:28:38
      左右边界呀
      上海-稀饭(591958938)  22:28:39
      左右
      广州-步科(17779104)  22:28:48
      仔细观察:

      如有以下记录结构:
          Customers (1, 10)
              Consumers (2, 3)
              Partners (4, 9)
                  Basic Partners (5, 6)
                  Gold Partners (7, 😎
          Suppliers (11, 12)
      上海-空无一人(2158691)  22:28:52
      加入要读 Customers  的子节点:
      SELECT id FROM partner_category
          WHERE parent_left > 1 AND parent_left < 10

      应该是 parent_left>1 parent_right<10?
      广州-步科(17779104)  22:29:39
      呵呵,我错了,你是对的
      深圳-老刘(15251908)  22:29:39
      都在 1到10范围
      上海-空无一人(2158691)  22:30:07
      这里的1~10都是值id 》
      ?
      指的是id?
      广州-步科(17779104)  22:30:25
      对
      这种用法有一定的局限性,比如经常有插入删除场景中就不适用,计算量也不小。
      OE 用的也不多
      上海-空无一人(2158691)  22:31:22
      主数据上用用蛮好
      以查询为主
      'parent_left': fields.integer('Left Parent', select=1),
              'parent_right': fields.integer('Right Parent', select=1),    这些都是系统自带的字段?
      广州-步科(17779104)  22:32:22
      account.account
      product.cat
      stock.location
      等这些都是读的场景多
      南京-ccdos(1431494)  22:33:08
                  * operator must be a string with a valid comparison operator from this list: =, !=, &gt;, &gt;=, &lt;, &lt;=, like, ilike, in, not in, child_of, parent_left, parent_right
                    The semantics of most of these operators are obvious.


      @广州-步科 我想请教, parent_left, parent_right 在这里作为 operator 是怎么工作的 ?
      上海-空无一人(2158691)  22:33:15
      向 write_uid一样  可以直接用?
      广州-步科(17779104)  22:41:18
      domain 最终都是转成SQL 语句的,作为 operator 也是一样:
      如 [(id, parent_left, 1)] == parent_left > 1
      [(id, parent_right, 10)] == parent_right < 10

      其实就是转为  parent_left > 1 AND parent_right < 10

      1 条回复 最后回复 回复 引用 0
      • wjfonhand
        wjfonhand 最后由 编辑

        parent_left, parent_right 在这里作为 operator 是怎么工作的

        这个之前真没注意到,谢谢ccdos的分享和buke的解疑。

        GoodERP -- Odoo China fork

        1 条回复 最后回复 回复 引用 0
        • ieitzyb
          ieitzyb 最后由 编辑

          在物料分类中看到了,更关注“多级BOM”时的应用,再研究...

          http://www.OuduPLM.com/ 苏州欧度软件,专注服装行业(鳴謝:37signals,Trello,ProcessON,重庆慧积,上海开阖)

          1 条回复 最后回复 回复 引用 0
          • ieitzyb
            ieitzyb 最后由 编辑

            我在制造业,一些成衣企业从纱开始操作(多赚一点,但压资金厉害),衣服布料(染整后,裁剪前的状态)可以有“子料(坯布)”和“孙料(纱)”,而可以有各自的BOM用量、损耗等,有点挑战。

            http://www.OuduPLM.com/ 苏州欧度软件,专注服装行业(鳴謝:37signals,Trello,ProcessON,重庆慧积,上海开阖)

            1 条回复 最后回复 回复 引用 0
            • C
              codefans 最后由 编辑

              好像明白了

              1 条回复 最后回复 回复 引用 0
              • mrshelly
                mrshelly 最后由 编辑

                2014-07 Tommy 又针对 parent_left, parent_right 做了一些测试:

                详见 群聊天记录: <br / [检测到链接无效,已移除] br />

                1 条回复 最后回复 回复 引用 0
                • O
                  oldrev 最后由 编辑

                  以前做过个 PPT 详细讲过这个问题,这是专用于关系数据库存储层次数据的 nested sets 数据结构。
                  参考附件

                  1 条回复 最后回复 回复 引用 0
                  • wjfonhand
                    wjfonhand 最后由 编辑

                    很棒的PPT,这类分享很适合技术大会

                    GoodERP -- Odoo China fork

                    1 条回复 最后回复 回复 引用 0
                    • First post
                      Last post