gpt4 book ai didi

inheritance - 覆盖并更改函数的中间部分 Odoo

转载 作者:行者123 更新时间:2023-12-04 11:00:09 27 4
gpt4 key购买 nike

我想覆盖一个名为 的函数_cart_update 这是在网站销售模块。但是我想改变函数的中间(我想在函数代码中间做点什么)。所以我尝试在我的自定义模块中重写函数并添加网站销售模块作为依赖模块(我重写了函数而不添加任何 super() 调用)。我的函数得到函数调用。没问题。但是还有其他模块使用 覆盖相同的功能。 super () 来电。遗憾的是,这些功能将不会被执行。但我希望他们被处决。

我的工作有问题吗?还是有其他方法可以做到这一点?

谢谢你。

最佳答案

你可以做一个猴子补丁 :

from odoo.addons import website_sale  # so we can update the method in the class
# import any global variable that the method use directly from of website_sale
# I think I covered all variable but in version 11, I don't know if they change it in 12
from odoo.addons.website_sale.models.sale_order import _logger, ValidationError, request, UserError, _, api
# import any thing you need to use in your custom code if there is

@api.multi
def _cart_update(self, product_id=None, line_id=None, add_qty=0, set_qty=0, attributes=None, **kwargs):
# put the full code here
# you don't need to call super because it will be the last one to call
# it's like we defined it in the website_sale

# at the end replace the method in the class that was defined in the website_sale
website_sale.models.SaleOrder._cart_update = _cart_update

唯一的解决方案是替换 中的方法类(class) 因为如果你使用 supersub classes 之一中原来的方法是 executed .

关于inheritance - 覆盖并更改函数的中间部分 Odoo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58860325/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com