Odoo8中层级关系 parent_left,parent_right的定义及使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_23931991/article/details/83016103

Odoo8中一些具有层级关系的数据表都有parent_left和parent_right字段,在数据库设计中称为目录树结构数据(通俗解释请参考https://blog.csdn.net/aoshilang2249/article/details/71419809
还有一篇不错的文档:Odoo 之parent_left 和 parent_right设计:https://blog.csdn.net/Fitz_GuangChen/article/details/77331425

以odoo8中的库位模型为例
模型及字段定义:

# 模型定义
class stock_location(osv.osv):
    _name = "stock.location"   
    _description = "Inventory Locations"
    _parent_name = "location_id"
    _parent_store = True
    _parent_order = 'name'
    _order = 'parent_left'
    _rec_name = 'complete_name'

    # 字段定义
   'parent_left': fields.integer('Left Parent', select=1),
   'parent_right': fields.integer('Right Parent', select=1),

  • _parent_name是指当前数据的父数据id栏位(默认值是parent_id),
  • _parent_store表示使用parent_left,parent_right结构设计
  • ‘parent_left’,‘parent_right’: 字段用与存储左右节点

使用parent_left,parent_right进行查询
建立如下数据:

  • 物理库位(1, 10)
    • 西药库(2, 3)
    • 试剂库 (4, 9)
      • 试剂库1(5, 6)
      • 试剂库2 (7, 8)
  • 虚拟库位 (11, 12)
  1. 如查询试剂库下的所有子库位:
SELECT id FROM stock_location
    WHERE parent_left > 4 AND parent_right< 9
  1. 如查询西药库的父级库位:
SELECT id FROM stock_location
    WHERE parent_left < 2 AND parent_right < 9

猜你喜欢

转载自blog.csdn.net/sinat_23931991/article/details/83016103