1. 程式人生 > 其它 >odoo關於計算欄位store=True時導致的安裝/更新時間較長問題的解決方案

odoo關於計算欄位store=True時導致的安裝/更新時間較長問題的解決方案

Odoo安裝/更新模組原理

Odoo每次安裝/更新模組時,會進行以下幾步處理:

  • 1.判斷是否需要建立表,如果需要建立且表不存在,則進行表的建立(不進行欄位的建立);
  • 2.獲取該表中已經存在的欄位;
  • 3.獲取odoo模型中的所有欄位;
  • 4.遍歷欄位,對需要儲存的欄位,進行欄位的更新/建立,欄位屬性的更新;
  • 5.如果是compute欄位且store=True,則將compute方法加入任務佇列,進行歷史資料的計算儲存;

因為呼叫的是Odoo的ORM,會導致計算儲存時間過長;

解決方案

Odoo安裝/更新模組時間過長解決方案

方案1

原理:不使用compute欄位,每次儲存某關鍵欄位時呼叫方法

  • 1.不使用compute型別而改為常規型別;
  • 2.歷史資料在安裝/更新時使用sql處理;
  • 3.新記錄使用depends/contrains方式在儲存資料時呼叫函式解決;

方案2

原理:預先使用sql建立欄位在安裝/更新時會跳過compute方法

  • 1.使用compute欄位;
  • 2.在安裝/升級模組前先使用sql給表新增欄位及新增值;
  • 3.安裝/升級模組後走compute方法;

方案3

原理:安裝/更新模組跳過python方法,使用sql計算值

  • 1.使用compute欄位;
  • 2.在安裝/更新模組時,不觸發方法;新記錄觸發;
  • 3.安裝/更新後,使用sql處理歷史資料;

具體原理請結合 odoo安裝/更新模組原理 一節理解。