1. 程式人生 > 實用技巧 >odoo12的計算欄位compute和related

odoo12的計算欄位compute和related

**

odoo12的計算欄位compute和related

**
odoo的計算欄位預設不儲存在資料庫中,使用的時候在進行計算,不能用作domain等篩選的時候或者其他函式中引用該欄位使用,可以使用store=True強制儲存到資料庫中.但是加了store=True表示該欄位只能計算一次.下面來看一下compute和related的時候怎麼解決只計算一次的問題

  1. compute利用函式進行計算,加上@api.depends()裝飾器,依賴其他欄位觸發計算.這樣便可以解決store=True只計算一次的問題
  2. related依賴其他欄位

怎麼修改計算欄位的值?
計算欄位預設是隻讀的,要想修改計算欄位,就要在欄位定義中加入inverse屬性inverse='函式名',反引數的使用非常簡單。通常,計算欄位是隻讀的,因為它從記錄集即時計算值。如果您需要在 計算欄位上進行手動輸入,可以通過給出反函式來完成。因此,當欄位被寫入/建立時,它會觸發對修飾函式的呼叫。它反轉計算並設定相關欄位。

Invserse 通俗點講的話,他是 Compute 的相反設定.我們在 field 中設定了它對應的 Compute 計算方法,那麼這個欄位就變成了只讀的,這時候我們可以設定 inverse,來達到為該欄位賦值的目的。設定了 inverse 這個,欄位就可以在前端直接編輯,賦值就是通過這個 inverse 設定的方法

upper=fields.Char(compute='_compute_upper',inverse='_inverse_upper', search='_search_upper')

@api.depends('employee_id') 
def _compute_upper(self):
for rec in self:
	rec.upper = rec.employee_name.upper() if rec.employee_name else False

def _inverse_upper(self): 
for rec in self:
	rec.employee_name = rec.upper.lower() if rec.upper else False