Odoo8中層級關係 parent_left,parent_right的定義及使用
阿新 • • 發佈:2018-12-25
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)
- 如查詢試劑庫下的所有子庫位:
SELECT id FROM stock_location
WHERE parent_left > 4 AND parent_right< 9
- 如查詢西藥庫的父級庫位:
SELECT id FROM stock_location
WHERE parent_left < 2 AND parent_right < 9