📜  继承树属性odoo (1)

📅  最后修改于: 2023-12-03 15:41:18.576000             🧑  作者: Mango

继承树属性odoo

Odoo 是一个开源的企业资源管理软件,它基于Python语言开发,采用了MVC(Model-View-Controller)的设计模式,可以帮助企业集中管理其业务流程。其中继承树属性是Odoo中非常重要的一个概念。

什么是继承树属性?

在Odoo中,在一个模型中可能会有多个子类模型,而这些子类模型都会继承和扩展父类模型的属性和方法。这些模型之间的关系被称为继承树。

在继承树中,父模型被称为Abstract model,子模型被称为Concrete model。所有Concrete model共享父模型的属性和方法,并且可以通过继承和扩展来实现自定义功能。

如何定义一个继承模型

Odoo提供了_inherit_name属性来定义一个继承模型:

class SaleOrderInherit(models.Model):
    _inherit = 'sale.order'
    _name = 'sale.order.inherit'
    
    # Your code here

在上述代码中,_inherit属性定义了SaleOrderInherit是从sale.order继承而来的,而_name属性则定义了这个新的模型的名称,这个名称会在界面上显示。

如何扩展原有模型的属性和方法

在继承模型中,可以通过重载已有的方法和增加新的属性和方法来扩展父类模型:

class SaleOrderInherit(models.Model):
    _inherit = 'sale.order'
    _name = 'sale.order.inherit'
    
    new_field = fields.Float(string='New Field')
    
    @api.depends('new_field')
    def _compute_new_field(self):
        for record in self:
            record.amount_total += record.new_field

在这个例子中,我们向Sale Order模型中新增了一个新的字段new_field,并重载了其父类模型中的_compute_amount_total方法,使其能够计算新的字段。

如何调用父类的方法

有时候,我们在子类的方法中需要调用父类的方法,可以使用super()来实现:

class SaleOrderInherit(models.Model):
    _inherit = 'sale.order'
    _name = 'sale.order.inherit'
    
    def action_confirm(self):
        result = super(SaleOrderInherit, self).action_confirm()
        # Your code here
        return result

在上述例子中,我们在子类的方法中调用了父类模型中的action_confirm()方法,并返回其结果。

总结

继承树属性是Odoo中重要的一个概念,通过继承和扩展可以实现灵活的自定义功能。需要注意的是,在继承模型中重载已有的方法时,要注意父类模型中的代码逻辑,不要轻易将其覆盖,导致不必要的问题。