Introducción
Si alguna vez subiste la foto de un producto, el logo de la empresa o la foto de un empleado en Odoo, ya conoces de primera mano el campo Imagen. Es el elemento más visual del modelo de datos y aparece en lugares donde muchos usuarios ni sospechan, desde la ficha de producto hasta los listados del CRM.
Para el usuario final suele ser transparente: pulsas, subes la imagen y listo. Detrás de esa sencillez hay varios procesos técnicos: Odoo gestiona cómo se guarda la imagen, la redimensiona automáticamente y aplica controles que conviene entender antes de añadir campos de imagen en modelos personalizados.
En esta guía explico qué guarda el campo Imagen, cómo se comporta dentro del framework de Odoo, cómo añadirlo con Odoo Studio o mediante código Python, y ejemplos prácticos de uso en flujos empresariales reales.
¿Qué es el campo Imagen en Odoo?
En Odoo existe un tipo de campo específico para imágenes: fields.Image (introducido en Odoo 13). Antes se usaba fields.Binary con un widget de imagen; hoy el tipo Image se encarga de todo el ciclo de vida de la imagen, incluida la redimensión automática y las validaciones propias de archivos gráficos.
Técnicamente, las imágenes se almacenan como datos binarios codificados en base64. En PostgreSQL esto puede residir en una columna bytea o, más habitual en versiones modernas, como adjuntos en el modelo ir.attachment vinculados al registro. Al externalizar los binarios en adjuntos se aligera la tabla principal y Odoo puede servir las imágenes mediante URLs de attachment de forma eficiente.
Cómo se ve en la interfaz
En una vista de formulario el campo Imagen aparece como un espacio clicable que muestra una miniatura. Los usuarios suben la foto desde su equipo y, según configuración, incluso pueden pegar una URL. La vista ofrece un preview inmediato que facilita reconocer la imagen sin abrirla.
En las vistas de lista las imágenes no suelen mostrarse porque las miniaturas pueden ralentizar la carga. En cambio, en vistas kanban son muy útiles: las tarjetas visuales se benefician de fotos de producto, logotipos o avatares para una navegación más rápida.
Image vs Binary en Odoo
Es importante distinguir ambos: Binary acepta cualquier tipo de fichero (PDFs, hojas de cálculo, ZIPs), mientras que Image está optimizado exclusivamente para imágenes. El tipo Image aplica redimensionado al guardar, validaciones específicas y se renderiza correctamente con el widget de imagen. Si no son fotos o logos, usa Binary; si son imágenes, usa Image.
Cómo funciona el campo
Cuando un usuario sube una imagen a un campo Image, Odoo no se limita a almacenar el fichero tal cual: lo procesa antes de guardarlo.
Redimensionado automático
La declaración fields.Image admite parámetros max_width y max_height; si la imagen supera esas dimensiones, Odoo la redimensiona manteniendo la proporción. Este proceso se ejecuta al guardar y es transparente para el usuario.
El tamaño máximo por defecto suele ser 1920 píxeles en el lado mayor, por eso en modelos estándar verás nombres como image_1920 en product.template o res.partner.
Variantes de tamaño de imagen
En los modelos nativos es habitual encontrar una serie de campos relacionados: image_1920, image_1024, image_512, image_256 e image_128. Son fields.Image relacionados con la imagen principal y cada uno tiene límites distintos de tamaño.
Este patrón permite servir el tamaño adecuado según el contexto: un listado usa miniaturas pequeñas para mantener la velocidad, mientras que la ficha de producto solicita la imagen completa para mejor detalle. En modelos personalizados puede que necesites o no este patrón, según dónde y cómo se muestre la imagen.
Almacenamiento como adjuntos
Por defecto las imágenes se guardan como adjuntos en Odoo: el binario vive en ir.attachment y el registro contiene la referencia. Así se evita inflar las tablas principales con datos pesados.
Además, las imágenes quedan accesibles mediante URLs previsibles como /web/image/product.template/42/image_1920, patrón que se usa en sitios web, plantillas de correo y respuestas de la API.
Control de acceso
Las imágenes respetan las reglas de acceso del propio registro: si un usuario no tiene permiso de lectura sobre un producto, no podrá recuperar su imagen. Odoo aplica la seguridad automáticamente, algo clave a tener en cuenta cuando se construyen portales o páginas públicas.
Casos de uso en la empresa
El campo Imagen tiene múltiples aplicaciones en módulos corrientes de Odoo. A continuación, las más habituales en la práctica.
1. Catálogo de productos (Ventas e Inventario)
Las fotos de producto son quizás el uso más visible. Cada product.template incluye image_1920 y esas imágenes aparecen en la tienda online, en PDFs de pedido, en pantallas POS y en operaciones de picking en móviles.
Las empresas con catálogos grandes suelen optar por subir imágenes en masa mediante la API (XML-RPC/JSON-RPC) en lugar de hacerlo manualmente. Odoo acepta imágenes en base64, por lo que la carga programática es directa y escalable.
2. Logos de clientes y proveedores (CRM y Compras)
El modelo res.partner contiene un campo Imagen para fotos de contacto y logotipos de empresa. Estas imágenes se muestran en la ficha del partner, en la zona de chatter y en tarjetas kanban del CRM, ayudando a identificar cuentas de forma visual.
3. Fotos de empleados (RRHH)
hr.employee guarda la foto del empleado en un campo Imagen. Se usa en el directorio de personal, en algunas configuraciones de nómina y aparece en Discuss junto a los mensajes. En procesos de incorporación masiva es habitual poblar estas fotos mediante importación o API.
4. Fotos de equipos y activos (Mantenimiento)
El módulo de Mantenimiento permite adjuntar imágenes a equipos. Para técnicos de campo es muy útil ver la foto del equipo en la orden de trabajo y confirmar visualmente el elemento antes de comenzar la reparación.
5. Formularios de inspección o control de calidad personalizados
Muchas empresas crean modelos a medida para inspecciones, comprobaciones de calidad o entregas. Añadir un campo Imagen permite adjuntar evidencia fotográfica al registro —un patrón habitual tanto desde Studio como desde código— y resulta práctico para controles en campo.
Crear o personalizar el campo
Hay dos vías principales para añadir un campo Imagen: la opción sin código con Odoo Studio o la vía de desarrollo en Python para un control más preciso.
Con Odoo Studio
Odoo Studio es la herramienta no-code integrada. Para añadir una Imagen, abre la aplicación, activa Studio desde el menú superior y edita la vista de formulario donde quieras el campo.
Arrastra el control Imagen desde el panel de campos al formulario; Studio te pedirá la etiqueta y creará el campo en el modelo automáticamente. Es la opción recomendada para consultores funcionales y usuarios de negocio que quieren evitar involucrar a desarrolladores.
Los campos creados con Studio llevan por convención el prefijo x_studio_ (por ejemplo x_studio_site_photo) y funcionan igual que los Image nativos en almacenamiento y presentación.
Con Python (desarrollo de Odoo)
Si necesitas una personalización técnica, defines el campo Image en un archivo Python del módulo. A continuación tienes un ejemplo sencillo de cómo añadir una imagen a un modelo personalizado:
from odoo import models, fields
class SiteInspection(models.Model):
_name = 'site.inspection'
_description = 'Inspección de Sitio'
name = fields.Char(string='Referencia', required=True)
photo = fields.Image(
string='Foto del Sitio',
max_width=1920,
max_height=1920,
)
photo_128 = fields.Image(
related='photo',
max_width=128,
max_height=128,
store=True,
string='Miniatura',
)
Los parámetros max_width y max_height limitan el tamaño guardado a 1920 píxeles. photo_128 es un campo relacionado que almacena una versión reducida para kanban o listas: es el patrón habitual para manejar varias resoluciones desde un mismo registro.
Incluir el campo en una vista
Teniendo el campo en el modelo, debes añadirlo en la vista para que sea visible. En XML de vista de formulario se usa el atributo widget="image":
<field name="photo" widget="image" class="oe_avatar"/>
La clase oe_avatar lo presenta como avatar circular en la esquina superior izquierda, el estilo estándar de Odoo; si prefieres mostrarlo inline puedes omitir la clase y colocarlo donde convenga en el layout.
Buenas prácticas
Recomendaciones prácticas cuando trabajes con campos Imagen en Odoo.
Fija límites de tamaño realistas
El límite de 1920 píxeles sirve para la mayoría de casos. No lo aumentes sin motivo —salvo que necesites fotos de altísima resolución para impresión— porque imágenes más grandes aumentan los adjuntos, el uso de almacenamiento y pueden afectar a la carga de páginas.
Crea una miniatura para listas y kanban
Si vas a mostrar la imagen en listados o kanban, define un campo relacionado pequeño (128 o 256 px). Pedir miniaturas de 128 px es mucho más eficiente que cargar la imagen completa para cada tarjeta en pantalla.
Usa la API para subidas masivas
Para cientos o miles de imágenes evita la carga manual. Emplea XML-RPC o JSON-RPC para escribir datos en base64 a los campos. Es más rápido y automatizable; la guía de desarrolladores de Odoo describe bien este flujo.
Comprime las imágenes antes de subirlas
Aunque Odoo redimensiona automáticamente, no siempre comprime al máximo. Un JPEG de 5 MB reducido a 1920 px puede seguir pesando varios cientos de KB. Comprimir antes de subir mantiene los adjuntos contenidos, especialmente en catálogos grandes.
Evita campos Imagen en listas muy consultadas
Mostrar la imagen en una columna de lista obliga a Odoo a recuperar binarios para cada fila visible, lo que ralentiza la vista. Si necesitas visual, usa una miniatura y reserva la imagen a tamaño completo para la ficha.
Errores frecuentes
Errores y malas decisiones que solemos ver al trabajar con campos Imagen.
Confundir Binary con Image
Un campo Binary sin widget de imagen se mostrará como botón de descarga, no como preview. Para que se vea la imagen necesitas fields.Image o un fields.Binary con widget="image" en la vista. Esta confusión es frecuente, sobre todo en versiones antiguas.
No planear las variantes de tamaño con antelación
Crear solo un campo grande es sencillo, pero si luego necesitas miniaturas para kanban o web, añadir campos relacionados en un módulo personalizado implica migraciones. Planificar los tamaños desde el inicio evita problemas posteriores.
Almacenar imágenes directamente en tablas en vez de usar adjuntos
En instancias muy antiguas o mal configuradas puede ocurrir que los binarios estén en la columna de la tabla principal, inflando sus tamaños y ralentizando consultas no relacionadas. Asegúrate de usar almacenamiento de adjuntos o S3 si procede.
Usar campos Imagen como repositorio documental
Guardar documentos escaneados o pantallazos en campos Imagen no es la mejor idea. Para gestión documental usa el módulo Documents o un campo Binary con descarga. Image está pensado para fotos y logos, no para documentos multipágina.
Olvidar las reglas de acceso en páginas públicas
Si expones URLs de imagen en una web pública pero el registro no es accesible para usuarios anónimos, la imagen devolverá 404. Al crear páginas públicas o portales, verifica que la imagen sea accesible según el público objetivo.
Conclusión
A primera vista el campo Imagen es sencillo, pero conviene entender su comportamiento para no llevarse sorpresas. Saber cómo Odoo redimensiona, almacena como adjuntos y maneja variantes de tamaño te ahorrará tiempo al diseñar modelos con datos visuales.
Para usuarios de negocio, saber que las imágenes quedan vinculadas y accesibles por URL facilita montar páginas web o portales. Para desarrolladores, el patrón de fields.Image junto a campos relacionados para miniaturas es el estándar y merece practicarse desde el principio.
Tanto si añades fotos de producto, adjuntas imágenes de inspección o montas un portal con logos de clientes, el campo Imagen ofrece una manera sencilla y bien integrada de manejar material visual dentro del modelo de datos de Odoo.
¿Necesitas ayuda con tu implementación de Odoo?
En Dasolo acompañamos a empresas en la implantación, personalización y optimización de Odoo en todos los módulos y versiones. Ya sea configurar campos en modelos estándar, desarrollar módulos a medida o migrar datos desde sistemas legacy, trabajamos junto a tu equipo para que Odoo funcione según las necesidades reales del negocio.
Si quieres resolver dudas sobre tu instalación de Odoo o explorar las posibilidades de la plataforma, contáctanosy estaremos encantados de ayudarte.