Diferencia entre inherit e inherits - La herencia por delegación en Odoo
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
Apasionado de la programación, implementa Odoo para distintos tipos de negocios desde el año 2010. En Moldeo Interactive es Socio fundador y Programador; además de escribir en el Blog sobre distintos temas relacionados a los desarrollos que realiza.