Odoo:如何覆盖原始函数

时间:2015-09-30 06:56:11

标签: python override odoo overwrite

在Odoo中,每次打开产品表时都会计算产品数量。这发生在model product.product ==> function _product_available。

此函数返回一个名为res。

的字典

示例:

res = {8: {'qty_available': 5000.0, 'outgoing_qty': 1778.5, 'virtual_available': 3221.5, 'incoming_qty': 0.0}}

现在我想修改这些值。我已经设法通过直接在原始函数_product_available中编码来实现这一点。

由于这不是正确的方法,我想在继承模型中这样做。我想我需要覆盖这个功能?还是覆盖?不知道它叫什么。

我读到的关于这件事的一切对我来说都很模糊。我找不到很多好的信息或例子。当我使用新风格(模型)时,我也在努力解决原始函数是用旧式(osv)编写的事实。

根据我在互联网上收集的信息,我写了类似的内容(这不起作用)。

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

有没有人知道修改原始函数_product_available的返回字典的正确方法?

我如何运作

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

刚刚定义的方法与原始模型完全相同。

2 个答案:

答案 0 :(得分:0)

我想你可以尝试一下。

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

答案 1 :(得分:0)

提问者的解决方案(从问题中删除了答案数据):

我是如何让它工作的:

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

刚刚定义了与原始模型中完全相同的方法。