Diferencia entre inherit e inherits en Odoo

Gustavo Orrillo
- 13/05/2022 - 1 min. de lectura

Revisando el código del módulo product de Odoo, en el archivo product.py (el cual define el comportamiento del modelo product.product) nos encontramos conque el modelo product.product hereda del modelo product.template por medio del keywork inherits, no inherit. Lo más extraño es que el modelo product.product usa los dos keywords para heredar en el modelo product.product

class ProductProduct(models.Model):
    _name = "product.product"
    _description = "Product"
    _inherits = {'product.template': 'product_tmpl_id'}
    _inherit = ['mail.thread', 'mail.activity.mixin']

Haciendo un grep en el código de Odoo me encontré que inherits se lo utiliza en varios lados, para mi sorpresa en el modelo account.payment donde el pago se hereda del asiento contable (account.move).

Que hace el keyword inherits? De acuerdo a la muy actualizada documentación de Odoo 8.0, inherits es una forma de definir la herencia por delegación en un modelo. La gran diferencia con inherit es, el nuevo modelo esta almacenado en una nueva tabla pero el modelo padre se encuentra "embebido" en el modelo hijo

 

Como verán es una funcionalidad que está implementado en varios lugares. Si observan en el modelo account.payment encontrarán que cuenta con todos los atributos y métodos del modelo account.move. Lo mismo con el modelo product.product que tambien implementa todos los atributos y métodos del modelo product.template.


Acerca de:

Gustavo Orrillo

Passionate about programming, he has implemented Odoo for different types of businesses since 2010. In Moldeo Interactive he is a founding Partner and Programmer; In addition to writing on the Blog about different topics related to the developments he makes.