2016-12-16 45 views
0

我使用Odoo V10中的UI在product.product模型上定義了一個新字段。該字段被定義如下:如果store = True,則Odoo相關字段不更新

Name = x_sellable_inventory 
Type = float 
Readonly = true 
Dependencies = qty_available,outgoing_qty 

的計算方法是:

for record in self: 
    record['x_sellable_inventory'] = record.qty_available - record.outgoing_qty 

我加入該域爲一個視圖,並確認它正在改變正確如果現有庫存被調整爲產品。到目前爲止,一切都按預期工作。

現在,我希望能夠從sale.order.line訪問此值,所以我在sale.order.line上創建了一個相關字段來訪問它。它的定義是這樣的:

Name = x_product_sellable_inventory_new 
Type = float 
Readonly = true 
Stored = true 
Related Field = product_id.x_sellable_inventory 

我加入這個領域的銷售訂單視圖,以便我可以在訂單行列表中看到它。它對樹中的每個訂單行都會出現一次。

現在,當我更改產品的現有數量時,它仍然在產品視圖上正確更新,但銷售訂單行上的值永遠不會更改。從設置它的最初時間開始它永遠不會改變。

如果我取消選中Store選項,值會正確更新。這裏發生了什麼?爲什麼相關字段是否存儲很重要?不應該在product_id.x_sellable_inventory的值發生變化時得到更新?

回答

0

我想我在這裏的問題是,我是想爲依存關係中使用的字段不stored自己。看起來這些字段需要被存儲以便正確地作爲依賴關係來工作,這是有道理的。如果模型不是存儲在數據庫中的字段,則模型無法知道相關字段已更改。 qty_availableoutgoing_qty不是存儲字段。

2

計算字段默認情況下不存儲。你知道的。當您希望能夠執行需要數據庫中可用數據的功能時,這會引發問題。

要修復此問題,Odoo在計算字段上提供了store = True標誌。

gotcha是它只發射一次。爲了解決這個問題,您需要使用@api.depends裝飾器(如@danidee和@CZoellner所述),以便每次更改相關字段或字段時更新字段。

@api.depends也可以接收逗號分隔的字段名稱列表。

@api.depends('field_name')

OR

@api.depends('field_name','another_field_name')

@api.one 
@api.depends('field2') 
def _compute_field1(self): 
    self.field1 = SOMETHING THAT OCCURS EVERY TIME `field2` CHANGES 


field1 = fields.Char(compute=_compute_field1,store=True) 
field2 = fields.Char() 
+0

謝謝。我在詢問一個「相關」字段,而不是「計算」。這有什麼區別嗎?根據這些文檔:http://odoo-new-api-guide-line.readthedocs.io/en/latest/fields.html#related-field它說:「設置商店kwarg會自動存儲在數據庫中的值。使用新API時,相關字段的值將自動更新,甜蜜。「我在這裏錯過了什麼?另外,如果'store = True',你的答案是不是意味着對計算字段的依賴關係是不相關的?由於該字段不會自動重新計算,所以依賴性更改不起作用。 – flyingL123

+0

我不確定文檔是否正確。不過,我相信這個原則依然存在。您應該能夠使用此解決方法的一些變體更新您希望的字段。我的理解是,store = True只會觸發一次。不管文檔說什麼。 –

+0

因此,依賴關係對存儲的計算字段沒有任何作用嗎?我是Odoo的新手,試圖學習所有這些錯綜複雜的東西。感謝您的幫助。 – flyingL123

相關問題