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

时间:2018-07-03 09:10:49

标签: python-3.x odoo odoo-10 odoo-11

上载模块到Git-> https://github.com/Kushikime/Invoice_currency_changer


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

此方法是从相同 create_invoices()

的另一种方法调用的

我试图继承该方法。但是只有通过 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从那时开始使用原始类而不是myClass()中的代码。

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:0)

您的继承已经很好,但是您应该尝试将_logger.debug(..更改为_logger.info(来查看您的日志,我从日志控制台获得了此消息,另一种模式是在DEBUG模式下启动Odoo服务器:< / p>

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

我希望这个答案对您有帮助。

答案 1 :(得分:0)

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

希望有用。