Herencia primaria de vistas
En este blog veremos, de manera sencilla y práctica, qué es la herencia primaria de vistas en Odoo, cómo funciona y por qué es un concepto importante para entender cómo esta plataforma construye su interfaz de usuario de forma modular y flexible.
Daniel Sánchez
12/18/20254 min read


¿Qué es la herencia primaria de vistas en Odoo?
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 de Odoo, ya que permite que distintos módulos alteren la interfaz sin entrar en conflicto entre sí.
¿Cómo se define una herencia primaria?
Una vista primaria es la vista original definida para un modelo y un tipo de vista específico:
form
tree / list
Kanban
search
etc.
Y una herencia primaria es una vista que hereda a alguna de las vistas originales definidas para un modelo (como las mencionadas anteriormente) utilizando el valor primary dentro del campo mode.

Al establecer el valor primary durante la herencia, no se realizarán cambios en la vista existente, sino que se creará una vista independiente que heredará la vista original y los cambios de la vista actual.
La herencia normal realizará cambios en la vista original; el modo principal actuará como una nueva vista con cambios.
Ejemplo de herencia primaria
Tenemos la vista lista de las compras (modelo purchase.order), cuyo nombre técnico es purchase.purchase_order_kpis_tree


A partir de la vista anterior, creamos una nueva vista con herencia primaria dentro de un módulo personalizado. En esta nueva vista agregaremos la columna Moneda después de la columna de Estado. El código de la nueva vista es el siguiente:


Donde:
mode: Es el campo que define la herencia primaria. Sus posibles valores son primary y extension, este último siendo el valor que toma por defecto. Solo aplica si se está heredando a otra vista (campo inherit_id).
También agregamos una acción y un elemento de menú para mostrar la nueva vista con herencia primaria creada. El menú se llama Nueva vista Solicitudes de cotización y se agrega después del menú Solicitudes de cotización original. El código para este menú es el siguiente:


Por lo que al actualizar nuestro módulo personalizado visualizamos el nuevo elemento de menú. Al seleccionarlo, vemos nuestra nueva columna Moneda después de la columna Estado.




Sin embargo, al regresar a la vista original de Solicitudes de cotización (cuyo nombre técnico es purchase.purchase_order_kpis_tree), notamos que esta nueva columna no está:


¿A qué se debe esto? A que la vista creada con herencia primaria toma los campos y cambios de la vista a la que hereda, pero los cambios que se agreguen en esta nueva vista no se verán reflejados en la vista a la que hereda.
Ahora, si creamos una vista que herede a la vista de Solicitudes de cotización normal sin utilizar herencia primaria, la columna nueva se verá en la vista original, como funciona normalmente. La columna que agregamos es Fecha de confirmación y la agregamos después de la columna Fecha límite de la orden. El código de la vista se ve de la siguiente forma:


Pero esta columna también se visualiza en la vista creada con herencia primaria (Nueva vista Solicitudes de cotización), junto con la columna Moneda que se agregó en la definición de esta nueva vista.


Esto debido a que la nueva vista con herencia primaria también obtiene los cambios y modificaciones que se hagan sobre la vista original, es decir, a la que le hace herencia primaria.
Por último, creamos una vista que herede a la vista creada con herencia primaria, es decir, la vista Nueva vista Solicitudes de cotización. Agregamos la columna Entrega esperada después de la columna Fecha de confirmación. El código se ve de la siguiente manera:


Al actualizar el módulo y ver nuestra vista creada con herencia primaria vemos que se agregó nuestra nueva columna.


Pero regresando a nuestra vista original, Solicitudes de cotización, notamos que esta nueva columna no está.


Consejos rápidos:
Utiliza herencia primaria solo en casos específicos. Una vista creada a partir de una herencia primaria puede tener campos que no estaban pensados para esa vista.
Las vistas creadas a partir de una herencia primaria son dependientes de una acción que las muestre; si no se define esta acción correctamente, no se podrá visualizar la nueva vista con herencia primaria junto con los cambios que se agregaron en su definición.
Toma en cuenta los cambios que hagas sobre la vista original y la vista con herencia primaria, podrían, o no, verse reflejados entre una u otra vista.
Exdoo TI S DE RL DE CV
10 años de experiencia en Odoo
