Saltar al contenido

Herencia de modelos y vistas en Odoo

🐍 ODOO · DESARROLLO · HERENCIA

Herencia de modelos y vistas en Odoo

Extiende los modelos base de Odoo sin tocarlos. En este ejercicio agregamos Fecha promesa de entrega a la venta y Costo del producto a las líneas — usando _inherit en Python y XPath en las vistas.

1Declarar dependencias en el manifest

En tu __manifest__.py, el atributo depends debe listar los módulos cuya funcionalidad o atributos vas a extender:

Manifest con dependencias declaradas

2Identificar el nombre del modelo

📂 Opción 1 — Código base
Búscalo en el módulo original de Odoo (atributo _name).
🔧 Opción 2 — UI dev mode
Activa modo desarrollador, click en un campo → popup muestra el modelo.
Modelo desde el código fuente
Modelo desde la UI con dev mode

3Heredar el modelo y agregar el campo

Declara la clase usando _inherit = 'sale.order' y agrega el nuevo atributo:

Clase con _inherit y nuevo campo

4Heredar la vista formulario

Crea un ir.ui.view con el atributo inherit_id apuntando al xml_id de la vista original (módulo + identificador):

Vista heredada con inherit_id

5Posicionar el campo con position

Toma como referencia un campo existente (en este caso has_active_pricelist) y elige cómo se inserta tu campo:

Position Comportamiento
before Inserta el nuevo contenido antes del campo de referencia.
after Lo inserta después.
replace Reemplaza el campo con el nuevo contenido.
inside Inserta dentro del contenedor (cuando es un grupo o sección).

Resultado en la vista formulario:

Campo Fecha promesa visible en el formulario

6Heredar la vista tree (líneas)

Para agregar el costo en cada línea, primero el atributo en el modelo de la línea:

Atributo costo en sale.order.line
💡 VISTAS EMBEBIDAS
La vista tree de las líneas vive embebida dentro del formulario de la venta — no tiene id propio. Hay que llegar al campo price_unit recorriendo la ruta a través de order_line.
Búsqueda de la ruta a price_unit
Ruta order_line hasta tree
Ruta encontrada al campo price_unit

7Usar XPath para insertar el campo

Con la etiqueta <xpath> apuntamos al campo price_unit y agregamos el costo justo antes:

XPath insertando el campo Costo antes de price_unit

Y así se muestra el campo Costo del producto en la vista tree de las líneas de venta:

Vista final con el campo Costo en líneas

📌 En resumen

La herencia es la pieza central de la extensibilidad de Odoo: _inherit para modelos, inherit_id + position o xpath para vistas. Mantiene tu código aislado del core y portable entre versiones. Si tienes dudas escríbenos a info@exdoo.mx.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

¿Te gustaría implementar Odoo en tu empresa?

12 años de experiencia · +60 implementaciones exitosas · Partner Gold de Odoo en México

Hablemos por WhatsApp