跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • 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. 关于 parent_left, parent_right

关于 parent_left, parent_right

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

    南京-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
    • wjfonhandW 离线
      wjfonhandW 离线
      wjfonhand
      写于 最后由 编辑
      #2

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

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

      GoodERP -- Odoo China fork

      1 条回复 最后回复
      0
      • ieitzybI 离线
        ieitzybI 离线
        ieitzyb
        写于 最后由 编辑
        #3

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

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

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

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

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

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

            好像明白了

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

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

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

              1 条回复 最后回复
              0
              • O 离线
                O 离线
                oldrev
                写于 最后由 编辑
                #7

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

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

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

                  GoodERP -- Odoo China fork

                  1 条回复 最后回复
                  0

                  • 登录

                  • 没有帐号? 注册

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