Openerp 如果store=True,则与Odoo相关的字段不更新

Openerp 如果store=True,则与Odoo相关的字段不更新,openerp,Openerp,我使用ODOOV10中的UI在product.product模型上定义了一个新字段。该字段的定义如下: Name = x_sellable_inventory Type = float Readonly = true Dependencies = qty_available,outgoing_qty Name = x_product_sellable_inventory_new Type = float Readonly = true Stored = true Related Field

我使用ODOOV10中的UI在
product.product
模型上定义了一个新字段。该字段的定义如下:

Name = x_sellable_inventory
Type = float
Readonly = true
Dependencies = qty_available,outgoing_qty
Name =  x_product_sellable_inventory_new
Type = float
Readonly = true
Stored = true
Related Field = product_id.x_sellable_inventory
计算方法为:

for record in self:
    record['x_sellable_inventory'] = record.qty_available - record.outgoing_qty
我将此字段添加到视图中,并确认如果为产品调整现有库存,则该字段将正确更改。到目前为止,一切正常

现在,我希望能够从
sale.order.line
访问此值,因此我在
sale.order.line
上创建了一个相关字段来访问它。它的定义如下:

Name = x_sellable_inventory
Type = float
Readonly = true
Dependencies = qty_available,outgoing_qty
Name =  x_product_sellable_inventory_new
Type = float
Readonly = true
Stored = true
Related Field = product_id.x_sellable_inventory
然后,我将此字段添加到“销售订单”视图中,以便在订单行列表中看到它。它对树中的每个订单行显示一次

现在,当我更改产品的现有数量时,它仍然会在产品视图上正确更新,但销售订单行上的值永远不会更改。它从最初设定的时间起就不会改变


如果我取消选中
存储
选项,该值将正确更新。这里发生了什么?为什么存储或不存储相关字段很重要?当
product\u id.x\u selleable\u inventory
的值发生变化时,它不应该更新吗?

默认情况下不存储计算字段。你知道的。当您希望能够执行需要数据库中的数据可用的功能时,这会导致问题

要修复此Odoo,请在计算字段上提供store=True标志

问题是它只发射一次。为了避免这种情况,您需要使用
@api.depends
装饰器(正如@danidee和@CZoellner所述),以便在每次更改相关字段时更新字段

@api.dependens
还可以接收以逗号分隔的字段名列表

@api.dependens('field\u name')

@api.dependens('field\u name','other\u field\u name')


默认情况下,不会存储计算字段。你知道的。当您希望能够执行需要数据库中的数据可用的功能时,这会导致问题

要修复此Odoo,请在计算字段上提供store=True标志

问题是它只发射一次。为了避免这种情况,您需要使用
@api.depends
装饰器(正如@danidee和@CZoellner所述),以便在每次更改相关字段时更新字段

@api.dependens
还可以接收以逗号分隔的字段名列表

@api.dependens('field\u name')

@api.dependens('field\u name','other\u field\u name')


我认为我这里的问题是,我试图用作依赖项的字段本身并没有存储。似乎需要存储这些字段才能作为依赖项正常工作,这是有道理的。如果依赖字段不是存储在数据库中的字段,则模型无法知道该字段是否已更改<代码>可用数量和
出库数量
不是存储字段。

我认为我这里的问题是,我试图用作依赖项的字段本身没有存储。似乎需要存储这些字段才能作为依赖项正常工作,这是有道理的。如果依赖字段不是存储在数据库中的字段,则模型无法知道该字段是否已更改<代码>可用数量和
出库数量
不是存储字段。

谢谢。我问的是一个
相关的
字段,而不是
计算的
。这有区别吗?根据这些文档:它说:“设置store kwarg将自动将值存储在数据库中。使用新的API,相关字段的值将自动更新,sweet。”我这里缺少什么?此外,如果
store=True
,您的答案不意味着对计算字段的依赖关系是无关的吗?由于该字段从不自动重新计算自身,因此依赖项的更改不会产生任何影响。我不确定这些文档是否正确。不过,我相信这个原则仍然有效。您应该能够使用此变通方法的一些变体来更新所需的字段。我的理解是,store=True只启动一次。不管文档怎么说,那么依赖项对存储的计算字段没有任何作用吗?我是奥多的新手,试图学习所有这些复杂的东西。谢谢你的帮助。我相信最终的结果是他们没有。许多人(包括我自己)在尝试编写这些复杂的代码时都感到沮丧。这意味着依赖关系毫无用处,因为字段要么在请求时实时计算,要么在创建记录时计算一次。所以依赖关系什么都不做。这里有些不对劲,谢谢。我问的是一个
相关的
字段,而不是
计算的
。这有区别吗?根据这些文档:它说:“设置store kwarg将自动将值存储在数据库中。使用新的API,相关字段的值将自动更新,sweet。”我这里缺少什么?此外,如果
store=True
,您的答案不意味着对计算字段的依赖关系是无关的吗?由于该字段从不自动重新计算自身,因此依赖项的更改不会产生任何影响。我不确定这些文档是否正确。不过,我相信这个原则仍然有效。您应该能够使用此变通方法的一些变体来更新所需的字段。我的理解是,store=True只启动一次。不管文档怎么说,那么依赖项对存储的计算字段没有任何作用吗?我是奥多的新手,试图学习所有这些复杂的东西。谢谢你的帮助。我相信最终的结果是他们没有。许多人(包括我自己)在试图围绕这些复杂性进行编码时感到沮丧。这意味着依赖关系毫无用处