【问题标题】:Odoo 14 overriding methodOdoo 14 覆盖方法
【发布时间】:2021-03-28 13:27:47
【问题描述】:

我正在尝试创建一个覆盖销售订单确认按钮的 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

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

谢谢!

【问题讨论】:

    标签: module overriding odoo odoo-14


    【解决方案1】:

    问题是您没有扩展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
    

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

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

    【讨论】:

    • 能否请您添加一个提示,为什么您在方法上方删除了api.model?因为这是正确的,但也应在答案中注明;-)
    【解决方案2】:

    当您想要覆盖插件中的代码时,您所能做的就是继承它。因此,您不能在覆盖现有代码时定义名称。 消除: _name ='saleoverride.saleoverride'

    【讨论】:

      猜你喜欢
      • 2021-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多