Introducción
El campo Char es uno de los tipos de campo más fundamentales en el modelo de datos de Odoo. Si alguna vez has mirado un nombre de contacto, una referencia de producto o una nota de pedido de venta, has interactuado con un campo Char sin necesariamente saberlo.
Entender cómo funciona este tipo de campo es importante, ya seas un usuario empresarial configurando formularios en Odoo Studio, un desarrollador escribiendo módulos personalizados, o un consultor ayudando a un cliente a diseñar su entorno Odoo.
Parece simple en la superficie, pero hay varias propiedades y comportamientos que vale la pena conocer para usarlo bien y evitar errores comunes. Esta guía abarca todo, desde lo que almacena el campo y cómo se comporta en la interfaz, hasta cómo crearlo y personalizarlo, junto con casos de uso empresarial reales.
¿Qué es el campo Char en Odoo?
En el ORM de Odoo, el campo Char está diseñado para almacenar cadenas de texto cortas. Se mapea a una columna VARCHAR o TEXT en PostgreSQL, dependiendo de si defines un límite de tamaño.
Desde la perspectiva del usuario, un campo Char aparece como una entrada de texto de una sola línea en los formularios y como una columna de texto plano en las vistas de lista. Es la opción estándar para almacenar nombres, códigos, referencias, identificadores y cualquier otra pieza corta de texto que quepa en una línea.
Así es como se ve en una definición de modelo de Python:
from odoo import fields, models
class SaleOrder(models.Model):
_inherit = 'sale.order'
customer_po_reference = fields.Char(
string='Referencia de PO del Cliente',
size=64,
index=True,
)
El parámetro string establece la etiqueta que se muestra en la interfaz. El parámetro size, que es opcional, limita el número de caracteres. El parámetro index crea un índice de base de datos para búsquedas más rápidas.
En Odoo Studio, este mismo campo se llama campo Texto (una sola línea). Cuando se crea a través de Studio, recibe automáticamente un prefijo x_studio_. Cuando se crea a través de código o de la API XML-RPC, eliges el nombre técnico tú mismo.
Cómo funciona el campo
Cuando defines un campo Char en Odoo, el marco maneja la creación de la columna en la base de datos automáticamente durante la instalación o actualización del módulo. No es necesario escribir migraciones SQL manualmente.
En la base de datos, los campos Char sin un límite de tamaño se almacenan como TEXT. Aquellos con un parámetro size utilizan VARCHAR(n). PostgreSQL trata ambos tipos de manera eficiente, por lo que la diferencia se trata principalmente de hacer cumplir una restricción de longitud en lugar de una distinción de rendimiento importante.
Atributos Clave del Campo
Aquí están las propiedades más importantes de un campo Char en el marco de Odoo:
- size: Número máximo de caracteres. Omite esto y no hay límite de longitud a nivel de base de datos.
- translate: Cuando se establece en
True, el valor del campo se puede traducir por idioma. Útil en implementaciones multilingües. - requerido: Hace que el campo sea obligatorio en la interfaz y a nivel de modelo.
- predeterminado: Establece un valor predeterminado automático cuando se crean nuevos registros.
- índice: Crea un índice de base de datos para un filtrado y búsqueda más rápidos en ese campo.
- calcular: Vincula un método de Python que calcula el valor del campo dinámicamente, útil para valores derivados o concatenados.
- almacenar: Cuando se combina con
calcular, controla si el valor calculado se persiste en la base de datos. - copiar: Controla si el valor del campo se copia al duplicar un registro. Por defecto es
True.
Cómo Aparece en las Vistas
En las vistas de formulario, un campo Char se representa como un elemento estándar <input type="text">. En las vistas de lista, se muestra como texto plano. En las vistas de búsqueda, admite filtros utilizando operadores de contiene, igual y comienza-con de forma predeterminada.
También puedes combinar un campo Char con widgets en la vista para cambiar cómo aparece. Por ejemplo, el widget email convierte un campo Char en un enlace de correo electrónico clicable, y el widget url hace que se abra en una nueva pestaña del navegador.
Interacción con el ORM de Odoo
Desde la perspectiva de un desarrollador, leer y escribir campos Char funciona como cualquier otro campo en el ORM de Odoo. Accedes al valor directamente en el objeto del registro, y el marco maneja la sanitización y validación según la definición del campo. No hay transformaciones complejas involucradas, lo que es parte de lo que hace que el campo Char sea tan práctico para el uso diario en el desarrollo de Odoo.
Casos de uso empresarial
El campo Char aparece en casi todos los rincones de una implementación de Odoo. Aquí hay cinco ejemplos del mundo real de flujos de trabajo comerciales comunes.
CRM: Números de Referencia de Clientes
Muchas empresas asignan números de referencia internos a sus clientes. Un campo Char en el modelo res.partner puede almacenar este código, haciéndolo buscable desde la lista de clientes y visible en órdenes de venta y facturas. Los equipos de ventas pueden acceder rápidamente a la cuenta correcta sin confusiones cuando varios clientes comparten nombres similares.
Ventas: Referencias de Órdenes de Compra
Cuando los clientes envían órdenes de compra, incluyen un número de PO que debe aparecer en las facturas y documentos de entrega. El campo nativo client_order_ref en sale.order es un campo Char. Se transfiere automáticamente a la factura, reduciendo el ir y venir con el cliente sobre referencias faltantes.
Inventario: Referencias Internas de Productos
El campo default_code en product.template es un campo Char nativo en Odoo. Almacena la referencia interna utilizada en todos los almacenes, escáneres de código de barras y órdenes de compra. Mantener este campo limpio y consistente es una de las prioridades más comunes de calidad de datos en las implementaciones de inventario.
Contabilidad: Números de Impuesto y Registro
Los números de IVA, IDs fiscales y números de registro de empresa se almacenan como campos Char en los registros de socios. Estos valores aparecen automáticamente en las facturas de clientes y en las facturas de proveedores cuando están configurados correctamente. Para las empresas que operan en múltiples países, tener estos datos almacenados de manera confiable en un solo lugar ahorra mucho trabajo manual de corrección.
RRHH: Identificadores de Empleados y Códigos de Insignia
Los equipos de RRHH frecuentemente necesitan almacenar números de identificación de empleados, códigos de insignia o identificadores de sistemas externos de nómina o control de acceso. Un campo Char en el modelo de empleado facilita la vinculación de los registros de Odoo con otras herramientas empresariales sin necesidad de una integración completa desde el primer día.
Creando o personalizando el campo Char
Hay tres formas principales de agregar un campo Char a un modelo de Odoo, dependiendo de tu configuración técnica y enfoque de implementación.
Usando Odoo Studio (Sin Código)
Odoo Studio es la herramienta de personalización de bajo código integrada. Para agregar un campo Char sin escribir ningún código:
- Abre Odoo Studio desde el menú principal.
- Navega hasta el formulario donde deseas el campo.
- Arrastra un campo Texto (una línea) desde la barra lateral al formulario.
- Establece la etiqueta, el estado requerido y, opcionalmente, un límite de tamaño en el panel de propiedades del campo.
- Guarda y cierra Studio.
Studio crea automáticamente el campo con un prefijo x_studio_ y lo añade a la vista del formulario. No se necesita migración de base de datos de tu parte.
Usando Python en un Módulo Personalizado
Para los desarrolladores que construyen módulos de Odoo, los campos Char se definen en archivos de modelo de Python. Este es el enfoque recomendado para cualquier personalización que necesite ser controlada por versiones y desplegada en múltiples entornos:
from odoo import fields, models
class ResPartner(models.Model):
_inherit = 'res.partner'
x_erp_customer_id = fields.Char(
string='ERP Customer ID',
size=32,
index=True,
copy=False,
)
Después de agregar el campo al modelo, también necesitas añadirlo al archivo XML de vista relevante para que aparezca en la interfaz. Odoo maneja la creación de la columna de base de datos cuando instalas o actualizas el módulo.
Usando la API XML-RPC
Si estás gestionando personalizaciones de Odoo de manera programática, por ejemplo, como parte de un pipeline de despliegue o un cuaderno de configuración remota, puedes crear campos Char a través de la API XML-RPC:
field_id = models.execute_kw(
ODOO_DB, uid, ODOO_API_KEY,
'ir.model.fields', 'create',
[{
'name': 'x_custom_reference',
'field_description': 'Referencia Personalizada',
'model_id': model_id,
'ttype': 'char',
'size': 64,
'state': 'manual',
}]
)
El valor state: manual le indica a Odoo que este campo fue creado manualmente (no por un módulo), que es la configuración correcta para los campos creados a través de Studio o la API. Así es como Dasolo gestiona la creación remota de campos para clientes como parte de scripts de configuración automatizados.
Mejores prácticas
1. Establece un tamaño cuando conozcas la longitud máxima
Si el campo almacena códigos de país ISO, números de teléfono o identificadores de longitud fija, define un size. Esto comunica la intención a cualquiera que lea el modelo y previene errores de entrada de datos accidentales. Un campo destinado a almacenar un código de país de dos letras no debería aceptar silenciosamente una cadena de 500 caracteres.
2. Agrega un índice para campos que busques con frecuencia
Si los usuarios filtran o buscan registros regularmente por un campo Char, como un código de cliente o referencia de pedido, establece index=True. En tablas con decenas de miles de registros, esto puede marcar la diferencia entre una búsqueda de un segundo y una espera de diez segundos.
3. Usa translate=True para contenido multilingüe
Si tu instancia de Odoo atiende a usuarios en múltiples idiomas y un campo contiene texto que varía según el idioma, habilita la traducción. Esto es importante para nombres de productos, puestos de trabajo o cualquier campo cuyo valor los usuarios en diferentes regiones esperarían ver en su propio idioma.
4. Da a los campos nombres técnicos claros y consistentes
En módulos personalizados, nombra los campos de manera descriptiva. Un campo llamado x_customer_erp_id es mucho más mantenible que x_field1. Si usas Studio, renombra el campo en el panel de propiedades antes de desplegarlo. Los nombres técnicos no se pueden cambiar fácilmente más tarde una vez que se almacena la información.
5. Usa compute para referencias derivadas
Los campos Char se pueden calcular dinámicamente. Por ejemplo, se puede construir una referencia que combine un año y un número de secuencia como un campo Char calculado. Con store=True, el valor se guarda en la base de datos y se puede utilizar en filtros de búsqueda e informes, mientras que la lógica de cálculo permanece centralizada en un método.
Errores comunes
La falta de límite de tamaño deja la puerta abierta para datos incorrectos.
Sin una restricción de tamaño, los usuarios pueden pegar párrafos enteros en un campo de referencia. Este es un problema real cuando el valor aparece más tarde en documentos impresos o se envía a sistemas externos con límites de caracteres estrictos. Siempre define un tamaño razonable para los campos donde la longitud importa.
Faltan índices en campos que se buscan con frecuencia.
Sin un índice, filtrar por un campo Char en una tabla grande es un escaneo completo de la tabla. Muchos equipos solo descubren este problema después de que su base de datos crece a un tamaño significativo. Si un campo se utiliza regularmente en filtros de vista de lista o barras de búsqueda, añade el índice desde el principio.
Confundir Char con el campo Text.
El campo Char es para texto corto de una sola línea. El campo Text es para contenido más largo de varias líneas. Usar un campo Char para direcciones, notas o descripciones conduce a una mala experiencia de usuario, ya que la entrada no se ajustará ni permitirá saltos de línea. Si el contenido podría abarcar realísticamente varias oraciones, utiliza un campo Text en su lugar.
Olvidar traducir en campos multilingües.
En empresas que operan en varios países, omitir la opción translate=True en un campo visible para el usuario significa que todos los usuarios de diferentes idiomas ven el mismo valor. Esto puede causar confusión en documentos orientados al cliente donde el contenido del campo debería adaptarse al idioma del documento.
Usar Char para datos que deberían ser una Selección o relación.
Si un campo siempre contiene uno de un conjunto limitado de valores, como una categoría, un estado o un país, debería ser un campo de Selección o una relación Many2one, no un campo Char. Usar Char para esto crea valores inconsistentes en los registros y hace que el filtrado y la elaboración de informes sean poco fiables. Los campos de texto libre invitan a errores tipográficos y variaciones que rompen la agrupación y el análisis.
Preguntas frecuentes
¿Cuál es la diferencia entre un campo Char y un campo Text en Odoo?
Un campo Char almacena texto corto en una sola línea y se representa como un campo de texto en los formularios. Un campo Text almacena contenido más largo en varias líneas y se representa como un área de texto redimensionable. Usa Char para nombres, códigos y referencias. Usa Text para descripciones, notas y cualquier cosa que los usuarios puedan escribir en varias oraciones.
¿Puedo limitar el número de caracteres almacenados en un campo Char?
Sí. Usa el parámetro size al definir el campo en Python, por ejemplo fields.Char(size=64). En Odoo Studio, puedes establecer este límite en el panel de propiedades del campo. Si no se establece un tamaño, el campo no tiene un límite de longitud impuesto a nivel de base de datos.
¿Cómo hago que un campo Char aparezca en la barra de búsqueda?
Agrega el campo a la vista de búsqueda del modelo. En Studio, habilita la opción de búsqueda en las propiedades del campo. En el código, agrega <field name="your_char_field"/> dentro de la definición de la vista <search> en tu XML. Una vez agregado, los usuarios pueden filtrar registros por ese campo directamente desde la barra de búsqueda.
¿Puedo almacenar números en un campo Char?
Técnicamente sí, pero no se recomienda para valores que necesitan cálculo o comparación numérica. Usa campos Integer o Float para cantidades y montos. Char es apropiado para cadenas que contienen dígitos, como códigos postales, números de teléfono, números IBAN o números de serie, donde el valor se trata como texto en lugar de un número.
¿Cómo creo un campo Char computado que también almacene su valor?
Define el campo con compute='_compute_my_field' y store=True. Escribe el método de cálculo usando @api.depends() para declarar qué otros campos desencadenan la recomputación. Con store=True, Odoo guarda el valor computado en la base de datos, haciéndolo disponible en búsquedas, filtros y exportaciones sin recalcular en cada lectura.
Conclusión
El campo Char es engañosamente simple. La mayoría de las personas interactúan con docenas de ellos todos los días en Odoo sin pensarlo. Pero cuando estás construyendo o personalizando un sistema Odoo, entender sus propiedades, su comportamiento en la base de datos y cuándo usarlo frente a otros tipos de campos hace una verdadera diferencia en la calidad de tu modelo de datos.
Ya sea que estés agregando una referencia de cliente a través de Odoo Studio, definiendo un campo en un módulo Python personalizado o creando campos programáticamente a través de la API, los patrones descritos en esta guía te ayudarán a hacerlo bien la primera vez.
Un modelo de datos bien diseñado basado en los tipos de campos correctos es uno de los fundamentos más importantes de una implementación exitosa de Odoo. El campo Char es una pequeña pieza de ese rompecabezas, pero es una que vale la pena entender correctamente.
En Dasolo, ayudamos a las empresas a implementar, personalizar y optimizar Odoo en todos los departamentos. Ya sea que necesite ayuda para diseñar un modelo de datos limpio, agregar campos personalizados a sus flujos de trabajo o construir un módulo completo de Odoo desde cero, nuestro equipo está aquí para ayudar. Póngase en contacto con nosotros y hablemos sobre su proyecto de Odoo.