[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' 作为清单文件中的依赖项来解决它。它对我有用。
希望有用。
已将模块上传至 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' 作为清单文件中的依赖项来解决它。它对我有用。
希望有用。