[ODOO]:重写另一个class的私有方法

[ODOO]:Override private method of another class

已将模块上传至 GIT --> https://github.com/Kushikime/Invoice_currency_changer


我想更改 sale.advance.payment.inv 模型中的 _create_invoice() 方法。

此方法是从 相同 class create_invoices()[=14 的另一个方法调用的=]

我试图继承方法。但是只有 create_invoices()

才能成功

所以结果,我想知道为什么我不能更改 _create_method() (我知道他们调用了私有方法,但我认为继承的方式必须相同)

代码:

#original Odoo class
class SaleAdvancePaymentInv(models.TransientModel):
    _name="sale.advance.payment.inv"
    ...
    @api.multi
    def create_invoices(self):
        ...
        self._create_invoice(order, so_line, amount)

    @api.multi
    def _create_invoice(self, order, so_line, amount):
        ...

这是代码,我是如何尝试继承方法的:

class myClass(models.TransientModel):
    _inherit="sale.advance.payment.inv"

    #INHERITING create_invoices() **SUCCESS INHERITED**
    @api.multi
    def create_invoices(self):
        _logger.debug("PRINT TRUE IF INHERIT IS SUCCESS")
        #HERE ODOO PRINT THE MESSAGE SUCCESS.
        ...
        self._create_invoice(order, so_line, amount)#HERE I TRY TO CALL THE METHOD WHICH I WAS CREATED FOR INHERITING
        _logger.debug("Print OK if all OK")
        #HERE ODOO IS NOT PRINT ANYTHING
        res = super(myClass, self).create_invoices()
        return res

    #HERE I TRY TO INHERIT THE ORIGINAL _create_invoice() method
    @api.multi
    def _create_invoice(self, order, so_line, amount):
        _logger.debug("PRINT TRUE IF SUCCESS INHERITED")
        #IN DEBUG LOGS ODOO DIDN'T PRINTED ANYTHING HERE

所以看起来我在我继承的方法中调用 _create_invoice() 之后,odoo 从那时开始使用原始 class 中的代码而不是 myClass() 中的代码。

任何帮助将不胜感激

您的继承已经很好,但您应该尝试将 _logger.debug(.. 更改为 _logger.info( 以查看您的日志,我从我的日志控制台收到此消息,另一种模式以 DEBUG 模式启动 Odoo 服务器:

2018-07-04 07:17:34,612 13072 INFO mydatabase odoo.addons.mymodule.models.sale: PRINT TRUE IF INHERIT IS SUCCESS
2018-07-04 07:18:19,591 13072 INFO mydatabase odoo.addons.mymodule.models.sale: PRINT TRUE IF SUCCESS INHERITED
2018-07-04 07:18:23,249 13072 INFO mydatabase werkzeug: 127.0.0.1 - - [04/Jul/2018 07:18:23] "POST /longpolling/poll HTTP/1.1" 200 -
2018-07-04 07:18:49,016 13072 INFO mydatabase odoo.addons.mymodule.models.sale: Print OK if all OK
2018-07-04 07:19:03,848 13072 INFO mydatabase odoo.addons.mymodule.models.sale: PRINT TRUE IF SUCCESS INHERITED

希望这个回答能对您有所帮助。

我知道已经晚了,但它可能对其他人有用。我遇到了同样的问题,我通过将模块 'sale' 作为清单文件中的依赖项来解决它。它对我有用。

希望有用。