Ir al contenido

Campos Personalizados en Odoo: Guía Completa

Aprende a extender cualquier modelo de Odoo con campos personalizados utilizando Odoo Studio o Python, y por qué es importante para tu negocio
6 de marzo de 2026 por
Campos Personalizados en Odoo: Guía Completa
Dasolo
| Sin comentarios aún

Cada negocio es diferente. Su equipo rastrea información que ningún software estándar anticipa, y ahí es donde entran en juego los campos personalizados en Odoo.


En lugar de forzar sus flujos de trabajo a ajustarse a un modelo de datos rígido, Odoo le permite agregar nuevos campos a casi cualquier registro, ya sea un cliente, un pedido de venta, un producto o una factura. Usted decide qué datos capturar, y Odoo los almacena junto con todo lo demás.


Esta guía cubre todo lo que necesita saber: qué son los campos personalizados, cómo funcionan internamente, cómo crearlos con o sin código, y cómo usarlos de manera que mantenga su instancia de Odoo limpia y mantenible.

¿Qué es un campo personalizado en Odoo?


Un campo personalizado es un campo de base de datos que usted agrega a un modelo existente de Odoo, más allá de lo que viene por defecto. Almacena una pieza específica de información vinculada a un registro, exactamente como lo haría un campo nativo.


En Odoo, los campos personalizados se identifican por el prefijo x_. Los campos creados a través de Odoo Studio utilizan nombres como x_studio_priority_level, mientras que los campos añadidos programáticamente pueden usar un prefijo específico de su proyecto, como x_dasolo_cost_center.


Desde la interfaz de usuario, un campo personalizado se ve y se comporta exactamente como cualquier campo estándar. Puede aparecer en formularios, vistas de lista, filtros, opciones de agrupación y reportes. Los usuarios que no conocen el lado técnico nunca notarán la diferencia.


Tipos de Campo Disponibles

Odoo admite una amplia gama de tipos de campo para campos personalizados, cubriendo la mayoría de las necesidades de datos:

  • Texto (Char): Texto corto, como un código de referencia o una etiqueta
  • Texto Largo: Texto libre de varias líneas para notas o descripciones
  • Entero: Números enteros, útiles para conteos o puntuaciones
  • Decimal (Float): Números con decimales, para mediciones o tasas
  • Monetario: Monto con conciencia de moneda, vinculado a un campo de moneda
  • Booleano: Una casilla de verificación verdadero/falso
  • Fecha / Fecha y Hora: Fecha del calendario o marca de tiempo
  • Selección: Una lista desplegable fija de opciones
  • Many2one: Un enlace a un solo registro en otro modelo
  • One2many: Una lista de registros relacionados de otro modelo
  • Many2many: Múltiples registros vinculados de otro modelo
  • Binary: Archivo adjunto
  • HTML: Contenido de texto enriquecido

Elegir el tipo de campo adecuado desde el principio ahorra muchos problemas más adelante. Un campo de selección es casi siempre mejor que un campo de texto libre cuando el conjunto de valores posibles se conoce de antemano.

Cómo funciona el campo


Odoo se basa en un marco llamado Odoo ORM (Mapeo Objeto-Relacional). Cada formulario, vista de lista y registro que ves en la interfaz está respaldado por un modelo de Python que se mapea a una tabla de base de datos. Cuando agregas un campo personalizado, Odoo lo registra en el ORM y crea automáticamente la columna correspondiente en PostgreSQL.


Esto es lo que hace que el modelo de datos de Odoo sea flexible: no estás parcheando el código fuente. Estás extendiendo el modelo a través de una capa de metadatos almacenada en la tabla ir.model.fields. Odoo lee esa tabla al inicio y construye los campos dinámicamente.


Campos definidos en código vs. Campos definidos en la base de datos

En el desarrollo estándar de Odoo, los campos se definen directamente en las clases de modelo de Python utilizando el marco de Odoo. Una definición típica de campo se ve así:


from odoo import models, fields

class SaleOrder(models.Model):
    _inherit = 'sale.order'

    cost_center = fields.Char(string='Centro de Coste')

Los campos personalizados creados a través de la interfaz de usuario o API siguen un camino diferente: se almacenan con state = 'manual' en ir.model.fields y se cargan en tiempo de ejecución. Ambos enfoques producen una columna real en la base de datos y se comportan de manera idéntica desde la perspectiva del usuario.


Campos relacionales y reciprocidad

Cuando creas un campo Many2one personalizado que apunta a otro modelo, Odoo espera un campo One2many correspondiente en el otro lado. Esto no es solo una convención: es la forma en que el ORM de Odoo navega por las relaciones entre registros.


Por ejemplo, si añades un x_project_id (Many2one a project.project) en un pedido de venta, también deberías añadir x_sale_order_ids (One2many de vuelta a sale.order) en el modelo de proyecto. Sin esto, la navegación desde el proyecto a sus pedidos vinculados no es posible a través de la interfaz estándar.


Campos Personalizados Computados

Los campos computados de Odoo son campos cuyo valor se calcula automáticamente en función de otros campos, en lugar de ser ingresados por el usuario. En personalizaciones técnicas, defines un método de Python y lo vinculas al campo utilizando el parámetro compute. Estos campos son de solo lectura y se actualizan cada vez que cambian sus dependencias.


Los campos computados son poderosos pero requieren código. Actualmente no se pueden crear a través de Odoo Studio sin el modo de desarrollador y algo de conocimiento de Python.

Casos de uso empresarial


Los campos personalizados aparecen en casi todos los proyectos de Odoo en los que trabajamos en Dasolo. Aquí hay cinco escenarios comunes de flujos de trabajo empresariales reales.

1. CRM: Calificando Leads Más Precisamente

Los leads estándar de Odoo capturan detalles de contacto y etapa del pipeline, pero muchos equipos de ventas necesitan más. Un campo Selection para "Industria del Cliente" o un Many2one que vincule a un modelo interno de "Segmento de Mercado" permite a los representantes de ventas calificar leads más rápido y permite a la gerencia informar sobre el pipeline por segmento.


2. Ventas: Seguimiento de Códigos de Proyecto Internos

Las empresas que facturan a los clientes por proyecto a menudo necesitan adjuntar un código de proyecto interno o una referencia de presupuesto a cada cotización o pedido de venta. Un simple campo Char llamado "Código de Proyecto" en sale.order hace esto posible sin una integración completa de gestión de proyectos. El campo aparece en documentos impresos y se puede usar para filtrar y agrupar pedidos en informes.


3. Inventario: Atributos Específicos del Producto

Más allá de los atributos estándar del producto de Odoo, las empresas a veces necesitan rastrear especificaciones técnicas únicas para su industria. Un fabricante podría añadir campos para "Período de Garantía (meses)" (Integer), "Norma de Certificación" (Selection), o "País de Origen" (Many2one a res.country). Estos campos se integran naturalmente con el formulario del producto y están disponibles en informes de inventario.


4. Contabilidad: Presupuesto y Asignación de Centro de Costos

Los equipos de finanzas a menudo necesitan etiquetar facturas o asientos contables con un centro de costos o línea de presupuesto. Un campo Many2one en account.move que apunta a un modelo personalizado de "Centro de Costos" permite una asignación de costos detallada sin modificar la configuración de contabilidad analítica de Odoo. Los filtros, tablas dinámicas y exportaciones respetan el campo inmediatamente después de su creación.


5. RRHH: Datos Personalizados de Incorporación

Los departamentos de RRHH a menudo recopilan datos durante la incorporación que no se ajustan a los campos estándar de empleados: tipos de contrato específicos de un país, categorías de habilidades internas o referencias de asignación de flota. Los campos personalizados en hr.employee mantienen esta información dentro de Odoo en lugar de en una hoja de cálculo separada, haciéndola buscable y reportable.

Creación o personalización del campo


Hay dos maneras principales de crear campos personalizados en Odoo. La elección correcta depende de tus recursos técnicos y de cuán complejo necesita ser el campo.


Opción 1: Odoo Studio (Sin Código)

Los campos de Odoo Studio son el camino más rápido para los usuarios de negocios. Con Studio habilitado, puedes agregar un nuevo campo a cualquier vista en unos pocos clics:

  1. Abre la aplicación y el tipo de registro donde deseas el campo (por ejemplo, un formulario de pedido de venta)
  2. Haz clic en el ícono de lápiz para entrar en el modo de edición de Studio
  3. Arrastra un tipo de campo desde el panel izquierdo al formulario
  4. Establece la etiqueta del campo, el nombre técnico y cualquier propiedad adicional
  5. Guarda y sal de Studio

Studio crea el campo en ir.model.fields con el prefijo x_studio_ y lo añade directamente a la vista. No se necesita despliegue ni reinicio del servidor. Este es el enfoque recomendado para campos sencillos que no requieren lógica personalizada.


Opción 2: Personalización técnica a través de la API

Para los equipos que trabajan en proyectos de personalización de Odoo, los campos se pueden crear programáticamente utilizando la API XML-RPC o escribiendo un módulo en Python. Este es el camino correcto cuando necesitas campos calculados, filtros de dominio complejos o campos que deben formar parte de una base de código controlada por versiones.


Usando la API, crear un campo de selección personalizado en un pedido de venta se ve así:


# Encontrar el ID del modelo para sale.order
model = models.execute_kw(
    db, uid, api_key,
    'ir.model', 'search_read',
    [['model', '=', 'sale.order']],
    {'fields': ['id', 'name']}
)[0]

# Crear el campo personalizado
field_id = models.execute_kw(
    db, uid, api_key,
    'ir.model.fields', 'create',
    [{
        'name': 'x_project_type',
        'field_description': 'Tipo de Proyecto',
        'model_id': model['id'],
        'ttype': 'selection',
        'selection': [('internal', 'Interno'), ('client', 'Cliente'), ('rd', 'I+D')],
        'state': 'manual',
    }]
)

Esta es parte del flujo de trabajo estándar de la guía del desarrollador de Odoo para añadir campos sin modificar archivos fuente. Es especialmente útil para configuraciones remotas y scripts de despliegue automatizados.


Para un enfoque completo de módulo en Python, los campos se definen en una clase de modelo y se cargan a través del mecanismo estándar de módulos de Odoo. Esta es la opción más mantenible para campos que persistirán a través de actualizaciones y necesitan ser rastreados en el control de versiones.


Añadiendo el campo a una vista

Crear un campo no lo hace automáticamente visible en la interfaz. También necesitas añadirlo a la vista de formulario o lista relevante. Con Studio, esto se hace al mismo tiempo que la creación del campo. Con la personalización técnica, modificas directamente el XML de la vista o creas una vista heredada que inyecta el campo en la posición correcta.


Mejores prácticas


Los campos personalizados son fáciles de crear, pero una arquitectura de campo mal planificada crea problemas que son difíciles de solucionar más tarde. Estas son las prácticas que mantienen las cosas limpias.


Usa campos de selección en lugar de texto libre siempre que sea posible

Si el conjunto de valores posibles se conoce de antemano, siempre utiliza un campo de selección en lugar de un campo de texto. El texto libre conduce a entradas inconsistentes ("Cliente", "cliente", "CLIENTE", "Cl.") que rompen filtros e informes. Un menú desplegable impone consistencia sin costo adicional.


Nombrar los campos de manera clara y consistente

El nombre técnico (x_project_type) debe reflejar el contenido, no la posición en el formulario. Un campo llamado x_field_1 es imposible de mantener seis meses después. Utiliza una convención de nombres consistente y documenta para qué sirve cada campo.


No sobrecargar los modelos nativos

Agregar diez campos personalizados a sale.order suele ser un signo de que un modelo personalizado serviría mejor. Si un grupo de campos pertenece juntos y representa una nueva entidad en tu negocio (un proyecto, un contrato, una certificación), considera crear un modelo personalizado y vincularlo con un campo Many2one en su lugar.


Siempre prueba en una base de datos de staging

Antes de agregar campos a una instancia de producción, prueba en una copia de la base de datos. La creación de campos es mayormente segura, pero agregar un campo al modelo incorrecto, o con el tipo incorrecto, puede requerir limpieza manual. Un entorno de staging detecta estos problemas temprano.


Documenta tus campos personalizados

Mantén un registro de cada campo personalizado que agregues: el modelo, el nombre técnico, el propósito y quién lo solicitó. Las implementaciones de Odoo acumulan campos con el tiempo, y sin documentación se vuelve imposible saber cuáles todavía están en uso y cuáles se pueden eliminar.


Usa la herramienta adecuada para la lógica computada

Si el valor de un campo depende de otros campos, utiliza un campo computado en lugar de pedir a los usuarios que lo completen manualmente. Esto evita inconsistencias y reduce errores de entrada de datos. Los campos computados son parte de la funcionalidad central de campos Python de Odoo y están bien documentados en el tutorial técnico oficial de Odoo.

Errores comunes


Incluso los equipos experimentados se enfrentan a los mismos problemas con los campos personalizados. Aquí están los que surgen con más frecuencia.


Olvidar el One2many al crear un Many2one

Este es el error técnico más común. Si agregas un campo Many2one en el modelo A que apunta al modelo B, y no creas el correspondiente One2many en el modelo B, la navegación de B a A se rompe. Los usuarios no pueden ver los registros relacionados desde el otro lado de la relación. Siempre crea ambos campos juntos.


Eliminar un Campo Que Contiene Datos

Eliminar un campo personalizado elimina permanentemente la columna de la base de datos y todos los datos que contiene. No hay deshacer. Si hay alguna posibilidad de que el campo o sus datos sean necesarios en el futuro, archiva o oculta el campo en lugar de eliminarlo.


Crear Campos Directamente en Producción

Hacer cambios directamente en una base de datos de producción en vivo, sin probar primero en un entorno de staging, es un riesgo incluso para adiciones de campos simples. Si algo sale mal con la configuración de la vista, los usuarios obtienen errores. Siempre valida primero en un entorno de prueba.


Conflictos de Nombres con Campos Estándar

Odoo rechazará un nombre de campo que ya existe en el modelo, pero es fácil crear accidentalmente un campo que oscurezca un campo de un módulo que instales más tarde. Usar un prefijo específico de la empresa (como x_acme_) para tus campos personalizados reduce considerablemente este riesgo.


Agregar un Campo a la Vista Sin Pensar en la UX

Solo porque se pueda agregar un campo a un formulario no significa que deba ser visible por defecto. Los formularios desordenados ralentizan a los usuarios. Si un campo solo es relevante en contextos específicos, colócalo en una pestaña separada o hazlo condicionalmente visible utilizando reglas de invisibilidad basadas en dominios.


Mezclar Campos de Studio y Campos Técnicos de Manera Inconsistente

Cuando un proyecto combina personalización de Studio y personalización basada en código, puedes terminar con campos que tienen propósitos superpuestos o nombres en conflicto. Acuerda una estrategia al inicio del proyecto: usa Studio para todos los campos sin código y código para lógica compleja, o usa código para todo. Mezclar ambos sin un plan claro crea dolores de cabeza en el mantenimiento.

Conclusión


Los campos personalizados son una de las formas más simples y más impactantes de adaptar Odoo a tu negocio. No requieren modificaciones en el código fuente, se integran de manera natural con el resto de la plataforma y brindan a los usuarios la captura de datos exacta que necesitan sin soluciones alternativas.

La clave es planificar antes de construir. Elige el tipo de campo adecuado, nombra las cosas de manera clara, respeta las convenciones de campos relacionales y documenta lo que creas. Una arquitectura de campos bien diseñada hace que tu instancia de Odoo sea más fácil de mantener y más fácil de evolucionar a medida que tu negocio crece.


Ya sea que estés utilizando Odoo Studio para campos rápidos sin código o escribiendo módulos de Python como parte de un proyecto más amplio de personalización de Odoo, los principios subyacentes son los mismos: emparejar el campo con los datos, mantener el modelo limpio y siempre probar antes de implementar en producción.

En Dasolo, ayudamos a las empresas a implementar, personalizar y optimizar Odoo para adaptarse a sus flujos de trabajo reales. Ya sea que necesites agregar algunos campos personalizados a tu configuración existente o construir un módulo personalizado completo desde cero, nuestro equipo está aquí para ayudar.

Contáctanos si necesitas orientación sobre tu implementación de Odoo. Estamos encantados de revisar tu configuración actual y sugerir el camino más limpio a seguir.

Campos Personalizados en Odoo: Guía Completa
Dasolo 6 de marzo de 2026
Compartir esta publicación
Iniciar sesión para dejar un comentario