1. 程式人生 > >Odoo8中層級關係 parent_left,parent_right的定義及使用

Odoo8中層級關係 parent_left,parent_right的定義及使用

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