Herencia primaria de vistas en Odoo
La herencia primaria (mode="primary") es el mecanismo que permite crear una vista independiente a partir de otra en Odoo, sin modificar la vista original. Es clave para la modularidad: distintos módulos pueden tener su propia vista derivada sin pisarse entre sí.
1
¿Qué es la herencia primaria?
En Odoo, la herencia primaria de vistas (primary view inheritance) es el mecanismo mediante el cual una vista base es extendida o modificada por otras vistas sin reemplazarla completamente. Es fundamental para la modularidad: distintos módulos pueden alterar la interfaz sin entrar en conflicto entre sí.
Una vista primaria es la vista original definida para un modelo y un tipo específico:
Una herencia primaria es una vista que hereda de alguna de estas vistas originales pero usando mode="primary" en lugar del modo por defecto.

2
Diferencia clave: primary vs extension
Esta es la distinción que define todo el comportamiento:
mode solo aplica si estás heredando de otra vista vía inherit_id. Si no hay inherit_id, estás creando una vista raíz, no una herencia.
3
Caso práctico: heredar la vista de Compras
Tomamos como base la vista lista de las compras (modelo purchase.order), cuyo nombre técnico es purchase.purchase_order_kpis_tree.

Creamos una nueva vista con herencia primaria en un módulo personalizado. En esta nueva vista agregamos la columna Moneda después de la columna Estado:

Como la vista primaria es independiente, también necesitamos definir una acción y un elemento de menú para mostrarla. Aquí el menú se llama “Nueva vista Solicitudes de cotización” y aparece después del menú original:

Al actualizar el módulo, vemos el nuevo elemento de menú; al seleccionarlo, encontramos la columna Moneda después de Estado:


4
Verificación: la vista original NO se modifica
Aquí está la prueba clave del comportamiento de mode="primary": si volvemos a la vista original de Solicitudes de cotización, la columna Moneda que agregamos no aparece ahí.

5
Lo inverso: extension SÍ se propaga (incluso a la primary)
Para confirmar, hacemos el experimento inverso: creamos una vista que herede de la original sin usar herencia primaria (modo extension por defecto). Agregamos la columna Fecha de confirmación después de Fecha límite de la orden:

Como esperamos, la nueva columna se ve en la vista original. Pero lo interesante: también aparece en la vista primaria que creamos antes, junto con la columna Moneda:

6
Cascada: heredar de una vista primaria
Por último, podemos crear una nueva vista que herede de la propia vista primaria (la “Nueva vista Solicitudes de cotización”). Agregamos la columna Entrega esperada después de Fecha de confirmación:

Al actualizar el módulo y abrir la vista primaria, vemos las tres columnas (Moneda, Fecha de confirmación y Entrega esperada):

Pero al volver a la vista original de Solicitudes de cotización, la columna Entrega esperada no está — confirma que la herencia primaria aísla por completo los cambios:

📊 Cómo se propagan los cambios
Vista primary → cambio visible (heredado)
Vista primary → cambio visible
Vista primary → cambio visible
💡 Consejos rápidos
ir.actions.act_window que la apunte y un menú que la invoque, la vista primaria simplemente no se ve. No basta con definirla.📌 En resumen
La herencia primaria en Odoo es la herramienta correcta cuando necesitas una variante de una vista que coexista con la original sin alterarla. Define mode="primary", agrega los cambios deseados y exponla con su propia acción y menú.
La regla mental simple: la herencia siempre fluye hacia abajo, nunca hacia arriba. Para extensiones globales, usa mode="extension"; para variantes localizadas, mode="primary". En Exdoo desarrollamos módulos a medida en Odoo y compartimos contenido técnico para ayudar a otros developers.
Deja un comentario