Ir al contenido

Modelo de Producto: Comprendiendo la Arquitectura de Variantes en Odoo

Una guía completa sobre el modelo de variantes de producto de Odoo para desarrolladores y consultores funcionales
10 de marzo de 2026 por
Modelo de Producto: Comprendiendo la Arquitectura de Variantes en Odoo
Dasolo
| Sin comentarios aún

Introducción


En Odoo, los modelos definen cómo se estructura y almacena la información en la base de datos. Cada pieza de datos empresariales con la que trabajas, desde pedidos de venta hasta inventario y productos, reside en un modelo.


Entender los modelos de Odoo es esencial tanto para desarrolladores como para consultores funcionales. Los modelos son la base de la arquitectura de datos de Odoo. Definen los campos, relaciones y lógica empresarial de Odoo.


Este artículo se centra en uno de los modelos más importantes de Odoo: product.product. Ya sea que estés construyendo módulos personalizados, integrando sistemas externos o configurando catálogos de productos, trabajarás con este modelo.

¿Qué es el modelo product.product?


El modelo product.product representa las variantes de producto reales en Odoo. Estos son los artículos concretos, vendibles y comprables que aparecen en los pedidos de venta, pedidos de compra y movimientos de inventario.


Este modelo en Odoo es diferente de product.template. La plantilla contiene atributos compartidos para una familia de productos. Los registros product.product son las variantes específicas. Para un producto simple sin variantes, hay un product.product por product.template. Para productos configurables (por ejemplo, camiseta con tamaño y color), cada combinación es un product.product separado.


El modelo está definido en el módulo de producto (product). Ventas, Compras, Inventario y comercio electrónico hacen referencia a product.product. Cuando agregas una línea a una cotización o recibes stock, trabajas con registros product.product.


product.product utiliza herencia por delegación de product.template. Muchos campos de Odoo están definidos en la plantilla y son heredados por la variante. Esto mantiene los datos compartidos en un solo lugar mientras permite sobreescrituras específicas de la variante.

Campos clave en el modelo


Aquí están los campos más importantes de Odoo en el modelo product.product. Comprender estos te ayudará a trabajar de manera efectiva con las variantes de producto.


1. name

Tipo: Char. Este campo almacena el nombre de la variante de producto. Se muestra típicamente en listas, formularios y documentos. Para productos simples coincide con el nombre de la plantilla. Para variantes puede incluir valores de atributos (por ejemplo, "Camiseta - Azul / M").


2. product_tmpl_id

Tipo: Many2one (product.template). Vincula la variante a su plantilla padre. Esta es la relación central. Cada product.product pertenece exactamente a una product.template. Usa esto cuando necesites heredar un modelo en Odoo o extender la lógica del producto.


3. default_code

Tipo: Char. Referencia interna o SKU. Utilizado para identificación, búsqueda de código de barras e integración con sistemas externos. Cada variante puede tener su propio código.


4. barcode

Tipo: Carácter. Código de barras (EAN, UPC, etc.). Utilizado para escaneo en POS, almacén e inventario. Debe ser único entre productos cuando se establece.


5. fecha_creación

Tipo: Fecha y hora. Almacena la fecha y hora en que se creó el registro. Gestionado automáticamente por Odoo. Útil para informes y auditorías.


6. fecha_modificación

Tipo: Fecha y hora. Almacena la fecha y hora de la última modificación. También gestionado automáticamente. Ayuda a rastrear cuándo se actualizó por última vez la información.


7. activo

Tipo: Booleano. Indicador de eliminación suave. Cuando es Falso, el registro se archiva y se oculta de las vistas predeterminadas. Los productos no se eliminan físicamente para preservar el historial.


8. tipo

Tipo: Selección. Tipo de producto: Consumible, Servicio o Producto Almacenado. Los consumibles no se rastrean en inventario. Los servicios no tienen stock. Los productos almacenables se rastrean en stock. Esto determina qué módulos y flujos de trabajo se aplican.


9. categ_id

Tipo: Many2one (product.category). La categoría del producto. Utilizada para informes, reglas de precios y organización del catálogo. Las categorías pueden tener una jerarquía de padre-hijo.


10. precio_lista

Tipo: Flotante. El precio de venta. Se muestra en las cotizaciones y se utiliza como predeterminado al agregar una línea. Puede ser anulado por cliente o por listas de precios.


11. standard_price

Tipo: Flotante. El precio de costo. Se utiliza para la valoración de inventario y cálculos de margen. Normalmente se actualiza mediante órdenes de compra o entrada manual.


12. uom_id

Tipo: Many2one (uom.uom). Unidad de medida para ventas e inventario. Define cómo se expresan las cantidades (unidades, kg, litros, etc.).


13. uom_po_id

Tipo: Many2one (uom.uom). Unidad de medida para compras. Puede diferir de uom_id (por ejemplo, comprar en cajas, vender en unidades). La conversión se maneja automáticamente.


14. description_sale

Tipo: Html. Descripción de ventas. Se muestra en cotizaciones, pedidos y facturas. Puede incluir formato y detalles del producto.


15. description_purchase

Tipo: Html. Descripción de compra. Se muestra en órdenes de compra y facturas de proveedores. Se utiliza para comunicación interna y con proveedores.


16. sale_ok

Tipo: Booleano. Se puede vender. Cuando es Falso, el producto está oculto de las ventas y el comercio electrónico. Útil para artículos internos o solo para compra.


17. purchase_ok

Tipo: Booleano. Se puede comprar. Cuando es Falso, el producto está oculto de la compra. Útil para artículos fabricados o solo para ventas.


18. image_1920

Tipo: Binario. Imagen del producto en resolución completa. Odoo almacena múltiples tamaños (image_512, image_256, etc.) para su visualización. Se utiliza en formularios, comercio electrónico e informes.


19. weight

Tipo: Flotante. Peso del producto. Se utiliza para cálculos de envío y logística. La unidad depende de la configuración de la empresa.


20. volume

Tipo: Flotante. Volumen del producto. Se utiliza para el envío y la capacidad del almacén. Importante para empresas con restricciones volumétricas.


21. company_id

Tipo: Many2one (res.company). En configuraciones de múltiples empresas, esto indica qué empresa posee el producto. Afecta la visibilidad de los registros y el stock.


22. currency_id

Tipo: Many2one (res.currency). Moneda para list_price y standard_price. Generalmente la moneda de la empresa. Las listas de precios pueden convertir a otras monedas.


23. qty_available

Tipo: Float. Cantidad disponible. Computada a partir de los quants de stock. Solo lectura. Usada para comprobaciones de disponibilidad e informes. Solo para productos almacenables.


24. virtual_available

Tipo: Float. Cantidad pronosticada (en mano más entrantes menos salientes). Usada para disponibilidad y reabastecimiento. Campo computado de solo lectura.


25. product_template_attribute_value_ids

Tipo: Many2many. Enlaces a los valores de atributo que definen esta variante (por ejemplo, Color=Azul, Tamaño=M). Usado para la configuración y filtrado de variantes.


26. sequence

Tipo: Integer. Orden de visualización. Usado para ordenar productos en listas y configuradores. Los valores más bajos aparecen primero.


27. display_name

Tipo: Char. Nombre de visualización computado. Combina el nombre con los atributos de variante. Usado en menús desplegables many2one y resultados de búsqueda. Solo lectura.


28. responsible_id

Tipo: Many2one (res.users). Persona responsable del producto. Utilizado para reglas de reordenamiento y asignación interna. Opcional.

Cómo se utiliza este modelo en los flujos de trabajo empresariales


1. Ventas y Cotizaciones

Cuando un vendedor crea una cotización, selecciona un producto.product del catálogo. El list_price, description_sale y uom_id fluyen a la línea de pedido. Las listas de precios pueden anular el precio. Solo aparecen productos con sale_ok=True.


2. Compras y Proveedores

Los pedidos de compra y las facturas de proveedores hacen referencia a product.product. El standard_price se actualiza a partir de los costos de compra. Los productos con purchase_ok=True están disponibles. El uom_po_id define cómo se ordenan las cantidades (por ejemplo, por caja).


3. Inventario y Stock

Los movimientos de stock, las recogidas y los quants utilizan product.product. Los campos qty_available y virtual_available determinan la disponibilidad. Solo se rastrean productos almacenables. El escaneo de códigos de barras utiliza el campo de código de barras para una búsqueda rápida.


4. Comercio Electrónico y Sitio Web

La tienda del sitio web muestra registros de product.product. Las variantes con diferentes atributos (tamaño, color) se muestran como opciones. Las imágenes, descripciones y precios de los productos provienen del modelo. La bandera sale_ok controla la visibilidad.


5. Fabricación y MRP

Las listas de materiales hacen referencia a product.product tanto para componentes como para productos terminados. El campo tipo determina si un producto es fabricado (almacenable) o consumido. Los niveles de stock impulsan la planificación de la producción.

Cómo los desarrolladores extienden este modelo


Los desarrolladores extienden product.product utilizando varios patrones. La herencia de modelos de Odoo es el principal mecanismo.


Herencia de Modelos

Utiliza _inherit = 'product.product' para extender el modelo. Agrega nuevos campos de Odoo, sobrescribe métodos o añade restricciones. El modelo heredado en Odoo mantiene tus cambios en un módulo separado para facilitar las actualizaciones. Elige product.product cuando el campo sea específico de la variante; utiliza product.template cuando se aplique a toda la familia de productos.


Añadiendo Campos

Define nuevos campos de Odoo en tu modelo heredado. Utiliza el tipo de campo correcto: Char, Many2one, Boolean, Integer, Text, Selection. Considera si el campo pertenece a la plantilla (compartido) o a la variante (específico). Para datos específicos de la variante como SKU o sobrescrituras de código de barras, utiliza product.product.


Extensiones de Python

Sobrescribe create, write o unlink para añadir lógica. Utiliza super() para llamar al original. Ten cuidado con los campos computados y sus dependencias. El modelo product.product tiene muchos campos computados de los módulos de stock y venta.


Odoo Studio

Odoo Studio te permite añadir campos sin código. Es bueno para personalizaciones rápidas. Para lógica compleja o actualizaciones, los módulos personalizados son más mantenibles. El modelo API en Odoo (product.product) está completamente expuesto a través de XML-RPC y JSON-RPC para integraciones.

Mejores prácticas


  • Utiliza default_code o barcode para el mapeo de sistemas externos. Mantenlos únicos y consistentes.
  • Establece el tipo correctamente para cada producto. Consumible vs Almacenable vs Servicio afecta qué módulos y flujos de trabajo se aplican.
  • Al construir integraciones API, utiliza product.product para líneas de pedido y transacciones. Utiliza product.template para operaciones a nivel de catálogo.
  • Para campos personalizados, utiliza el prefijo x_ o un prefijo de módulo para evitar conflictos con futuras versiones de Odoo.
  • Considera product.template al añadir campos que se apliquen a todas las variantes (por ejemplo, marca, categoría). Usa product.product para datos específicos de la variante (por ejemplo, código de barras específico de la variante).

Errores comunes


  • Hereda de product.template cuando necesites lógica específica de variante. Usa product.product para comportamiento por variante.
  • Crea registros de product.product manualmente en lugar de a través de la plantilla. Para productos variantes, créalos a través del configurador de productos.
  • Olvidar establecer sale_ok o purchase_ok. Los productos están ocultos de ventas/compras por defecto en algunas configuraciones.
  • Sobrescribir métodos centrales sin llamar a super(). Esto puede romper otros módulos o futuras actualizaciones.
  • Usar product.product en dominios cuando product.template sería más apropiado (por ejemplo, filtrando por categoría en la plantilla).

Conclusión


El modelo product.product es central en la arquitectura de productos de Odoo. Representa los artículos realmente vendibles y comprables. Entender sus campos y cómo se relaciona con product.template te ayudará a configurar, personalizar e integrar Odoo de manera efectiva.


Ya seas un consultor funcional mapeando catálogos de productos o un desarrollador construyendo módulos personalizados, un sólido entendimiento de product.product te ahorrará tiempo y evitará errores.

¿Necesitas ayuda con tu implementación de Odoo?


Dasolo ayuda a las empresas a implementar, personalizar y optimizar Odoo. Nos especializamos en integraciones de API y desarrollo de Odoo. Nuestro equipo tiene una profunda experiencia con la arquitectura de datos de Odoo y modelos como product.product.


Si necesitas ayuda con tu implementación de Odoo, módulos personalizados o integraciones, estamos aquí para ayudar. Reserva una demostración para discutir tu proyecto.

Modelo de Producto: Comprendiendo la Arquitectura de Variantes en Odoo
Dasolo 10 de marzo de 2026
Compartir esta publicación
Iniciar sesión para dejar un comentario