Odoo:如何覆盖原始功能
Posted
技术标签:
【中文标题】Odoo:如何覆盖原始功能【英文标题】:Odoo: How to override original function 【发布时间】:2015-12-27 20:43:15 【问题描述】:在 Odoo 中,每次打开产品表单时都会计算产品的数量。这发生在模型product.product ==> function _product_available
。
此函数返回一个名为 res 的字典。
例子:
res = 8: 'qty_available': 5000.0, 'outgoing_qty': 1778.5, 'virtual_available': 3221.5, 'incoming_qty': 0.0
现在我想修改这些值。我已经设法通过直接在原始function _product_available
中编码来做到这一点。
由于这不是执行此操作的正确方法,因此我想在继承模型中执行此操作。我想我需要覆盖function
?还是覆盖?不知道叫什么。
我读到的关于这样做的一切对我来说都很模糊。我找不到太多好的信息或例子。我还在为原始函数是用旧样式 (osv
) 编写的事实而苦苦挣扎,而我正在使用新样式 (models
)。
根据我在互联网上收集的信息,我写了这样的东西(这是行不通的)。
class product_product_inherit(models.Model):
_inherit = 'product.product'
#api.v7 because of old style? Also tried .multi and .model...
@api.v7
def _product_available(self, cr, uid, ids, field_names=None, arg=False, context=None):
#example of modified values. To be made variable after this is working.
res = 8: 'qty_available': 200.222, 'outgoing_qty': 1778.5, 'virtual_available': 30205.263671875, 'incoming_qty': 0.0
result = super(C, self)._product_available(res)
return result
有谁知道修改原function _product_available
返回字典的正确方法吗?
【问题讨论】:
【参考方案1】:我想你可以试试这个。
class ProductProductInherit(models.Model):
_inherit = 'product.product'
@api.multi
def _product_available(self, field_names=None, arg=False):
#example of modified values. To be made variable after this is working.
res = 8: 'qty_available': 200.222, 'outgoing_qty': 1778.5, 'virtual_available': 30205.263671875, 'incoming_qty': 0.0
result = super(ProductProductInherit, self)._product_available(res)
return result
【讨论】:
现在已经可以使用了。不管怎么说,还是要谢谢你!我将在我的 OP 中发布我是如何做到的。【参考方案2】:提问者的解决方案(从问题中删除答案数据):
我是如何工作的:
class product_product_inherit(models.Model):
_inherit = 'product.product'
def _product_available(self, cr, uid, ids, field_names=None, arg=False, context=None):
for product in self.browse(cr, uid, ids, context=context):
id = product.id
res = id: 'qty_available': 200.222, 'outgoing_qty': 1778.5, 'virtual_available': 30205.263671875, 'incoming_qty': 0.0
return res
只是定义了与原始模型完全相同的方法。
【讨论】:
以上是关于Odoo:如何覆盖原始功能的主要内容,如果未能解决你的问题,请参考以下文章
在 PhotoKit 中,修改 PHAsset 会留下原始的。如何?可覆盖?
rails:如何覆盖 cocoon gem 辅助方法并调用原始方法