Odoo 14 覆盖方法

Odoo 14 overriding method

我正在尝试创建一个覆盖销售订单确认按钮的 Odoo 模块。我按照我找到的信息,创建了以下代码,但它不起作用。

from odoo import models, fields, api
import logging
_logger = logging.getLogger(__name__) 

class saleoverride(models.Model):
    _name = 'saleoverride.saleoverride'
    _description = 'saleoverride'
    _inherit = 'sale.order'

    name = fields.Char()
    # value = fields.Integer()
    # value2 = fields.Float(compute="_value_pc", store=True)
    description = fields.Text()

    transaction_ids = fields.Many2many('payment.transaction', 'saleoverride_transaction_rel', 'saleoverride_id', 'transaction_id',
                                   string='Transactions', copy=False, readonly=True)
    tag_ids = fields.Many2many('crm.tag', 'saleoverride_tag_rel', 'saleoverride_id', 'tag_id', string='Tags')

    @api.model
    def action_confirm(self):
        res = super(SaleOrder, self).action_confirm()
        _logger.info("saleoverride_action_confirm")
        _logger.info(self)
        return res

我试图在日志文件中搜索消息,但找不到任何内容。有人可以帮助我吗?

谢谢!

问题是您不是在扩展 sale.order 模型,而是在 sale.order.

的基础上创建一个新模型 (saleoverride.saleoverride)

查看 odoo 文档:Inheritance and extension

from odoo import models, fields, api
import logging
_logger = logging.getLogger(__name__) 

class saleoverride(models.Model):
    _description = 'saleoverride'
    _inherit = 'sale.order'

    name = fields.Char()
    # value = fields.Integer()
    # value2 = fields.Float(compute="_value_pc", store=True)
    description = fields.Text()

    transaction_ids = fields.Many2many('payment.transaction', 'saleoverride_transaction_rel', 'saleoverride_id', 'transaction_id',
                                   string='Transactions', copy=False, readonly=True)
    tag_ids = fields.Many2many('crm.tag', 'saleoverride_tag_rel', 'saleoverride_id', 'tag_id', string='Tags')

    def action_confirm(self):
        res = super(SaleOrder, self).action_confirm()
        _logger.info("saleoverride_action_confirm")
        _logger.info(self)
        return res

从您的 class 中删除 _name = 'saleoverride.saleoverride' 会为 sale.order 添加新功能。

同时删除装饰器,因为原始函数没有装饰器。

当你想覆盖插件中的代码时,你能做的就是继承它。因此,您不能在覆盖现有代码的同时定义名称。 去掉: _姓名='saleoverride.saleoverride'