我有一個計算字段,必須更新字段更新時。 於是我就用@api.depends('field1')
和鏈接功能Odoo:計算字段,在某些情況下不更新?
field_to_compute: fields.integer(compute='the_function' store=True)
它工作正常。
但是要知道,我想更新時field1
取值爲A
,並保持不變時field1
取值B
。但是field_to_compute
的舊值是從數據庫導入的,並未進行計算。
所以,我有兩個問題:
- 我怎麼能允許用戶設置的值自己。 (我可以修改它, 但是當我創建一個新的成員,它會被計算,只有經過 第一救我可以修改它在UI)
我怎樣才能讓這樣的:
@api.depends('field1') def the_function(self): value = self.field1 if value == A: field_to_compute = 123123 elif value == B: field_to_compute = stored_field_to_compute #field_to_compute
保持相同的值作爲一個前
EDIT(例如)存儲:
我在當前模型中的res.partner,繼承res.partner。 我有個字段在它:
'model_state': field.char(compute='compute_type', string = 'Demand', store=True, readonly=True)
在第二res.partner繼承res.partner的太,另一模塊中,我有2個字段:grade
和status
,分別一個int和many2one 。以相同的方式計算與model_state相同的compute_type。
我也是在這個res.partner,有one2many場:link_ids
所以我的功能是:
@api.depends('link_ids.type', 'link_ids.result')
def compute_type(self):
for record in self:
if self.link_ids:
if self.link_ids.result == 'A':
if self.link_ids.type == 'type1':
record.model_state = 'Mytext'
record.grade = 15
record.state = 1 #this is an id
elif self.link_ids.result == 'B':
record.model_state = 'MySecondText'
record.state = 2 #this is an id
我不會把所有的東西,因爲它就像25 elif的(不是所有的如果等等等等),所以它不會相關。我查了很多時間,如果沒有什麼修改record.grade,如果沒有做任何事情,在其他或不知道,但它只是被清空。
基本上簡化了,如果結果「OK」的話我想做點什麼。把國家的身份證更改爲「接受」,給一個文本(如標題),給他一個更好的成績,如果不是,他有一個「被拒絕」的國家的身份證,給其他文本,並且保持與其實際相同的等級。
你怎麼能猜得到'self.link_ids.result'這個one2many的結果呢?作爲link_ids可能包含多個記錄,因此可能會有多個結果。並且希望代碼中沒有錯誤,這裏的錯字實際上取決於它的@ api.depends(...)' –
主鍵,對於一個res_partner你只能提出一個需求。它只是爲了在樹視圖中訪問我的res_partner並選擇其中一個(我在可編輯的樹視圖中)。所以,當我在res_partner中詢問links_ids時,它會找到他所在的元組並查看這些值。我嘗試了很多,它一直做我的預期,除了一定不能改變的領域 (我需要在我的模型中選擇一個res.partner,而many2one視圖對此非常有用) –
關於錯字,我添加了's',它只是在我的文章中輸入錯誤,而不是在代碼 –