Si alguna vez te has preguntado quién modificó un dato en un registro de Odoo y en qué momento, el seguimiento de cambios es la herramienta que responde a esa incertidumbre.
Odoo permite registrar modificaciones sobre campos concretos y guarda cada cambio en el chatter del registro. Así, los equipos obtienen trazabilidad sobre la evolución de la información sin necesidad de montar un sistema externo de auditoría.
Tanto si trabajas con Odoo Studio como si desarrollas módulos en Python, comprender cómo funciona el seguimiento de campos es imprescindible para diseñar modelos de datos fiables. Esta guía recoge lo esencial que debes saber para aplicarlo correctamente.
¿Qué es el campo de seguimiento en Odoo
En Odoo, el seguimiento no es un tipo de campo independiente, sino una propiedad que se activa en campos existentes —por ejemplo Char, Many2one, Selection, Integer o Date—. Al activar el seguimiento, Odoo registra en el chatter cada cambio de valor mostrando el valor anterior, el nuevo, la fecha y el usuario que realizó la modificación.
En la interfaz se refleja como una anotación en el hilo de mensajes del registro. Por ejemplo, en una oportunidad de ventas puede aparecer una nota automática del estilo: “Estado cambiado de Nuevo a Cualificado”, justo en el momento en que el comercial avanza la negociación.
La opción de seguimiento está disponible en la mayoría de tipos de campo estándar y puede activarse desde Odoo Studio o directamente en el código Python cuando desarrollas un módulo a medida.
¿Qué datos almacena
Cada cambio rastreado se guarda como un registro de mail.message asociado al documento. Ese mensaje contiene varios datos clave:
- El nombre o etiqueta del campo que ha cambiado
- El valor anterior (antes del cambio)
- El valor nuevo (tras el cambio)
- La fecha y hora de la modificación
- El usuario que realizó la acción
Cualquier usuario con permisos de lectura sobre el registro puede consultar ese historial en el chatter. No se necesita configuración adicional salvo activar el seguimiento en los campos deseados.
Cómo funciona el seguimiento de campos
Para que el seguimiento funcione, el modelo debe incorporar el mixin mail.thread. Este mixin proporciona la infraestructura de mensajería y registro necesaria; muchos modelos estándar de Odoo —como sale.order, crm.lead, account.move o stock.picking— ya lo incluyen.
Cuando un usuario guarda un registro que contiene campos con seguimiento, Odoo compara los valores antiguos y nuevos y escribe automáticamente una entrada en el chatter. No hace falta realizar pasos adicionales manuales.
Comportamiento técnico en el ORM de Odoo
A nivel técnico, el ORM de Odoo intercepta las operaciones de escritura. Al ejecutar un write() que modifica un campo con seguimiento, el framework captura el valor previo, aplica el cambio y crea el registro de mail.message que describe la diferencia.
En Python, se activa el seguimiento añadiendo tracking=True en la definición del campo dentro del modelo, por ejemplo:
state = fields.Selection(
[('draft', 'Draft'), ('confirmed', 'Confirmed')],
tracking=True
)
Puedes usar también un número de prioridad del 1 al 10 para controlar el orden de aparición cuando varios campos monitorizados cambian en la misma operación; los números más bajos se muestran primero.
partner_id = fields.Many2one('res.partner', tracking=1)
priority = fields.Selection(tracking=10)
Interacción con otros registros
Los cambios monitorizados se guardan en el registro donde vive el campo; no se propagan automáticamente a modelos relacionados. Si necesitas trazabilidad en modelos relacionados, debes activar el seguimiento en cada modelo pertinente.
Esto es intencionado: el modelo de datos de Odoo mantiene el historial junto al objeto modificado, lo que facilita revisar el rastro sin navegar por múltiples registros vinculados.
Casos de uso en la empresa
A continuación tienes cinco ejemplos prácticos donde activar el seguimiento aporta valor real en el día a día.
1. Gestión de la pipeline de ventas y CRM
Los equipos comerciales necesitan saber cuándo y quién movió una oportunidad de una etapa a otra. Activar el seguimiento en stage_id del CRM facilita a managers y SDRs reconstruir la secuencia de eventos sobre cada lead.
Eso ayuda a detectar cuellos de botella en la pipeline, preparar revisiones de rendimiento y formar a los comerciales basándose en datos objetivos en lugar de memoria.
2. Flujos de aprobación en compras y facturación
En contabilidad y compras es frecuente exigir evidencia de aprobaciones. Seguir el campo state en pedidos de compra o facturas permite ver de inmediato quién aprobó y cuándo, sin módulos de auditoría adicionales.
Esto resulta especialmente útil en empresas sujetas a controles financieros o auditorías internas.
3. Gestión de inventario y trazabilidad de stock
Cuando varían cantidades o ubicaciones, registrar cambios en movimientos de stock o fichas de producto ayuda a los responsables de almacén a identificar rápidamente el origen de una discrepancia.
En lugar de rastrear registros dispersos o preguntar a compañeros, la información suele estar disponible directamente en el chatter del documento afectado.
4. Calidad y control de datos de clientes
Si el equipo actualiza con frecuencia datos de clientes, puedes monitorizar campos críticos como email, phone o pricelist_id en el modelo de partner. Mantener ese historial es valioso para atención al cliente y auditorías de calidad de datos.
5. Expedientes de personal y RRHH
Rastrear cambios en puestos, departamentos o categorías salariales en registros de empleado garantiza una historia transparente de modificaciones; esto facilita el cumplimiento normativo y las auditorías internas en departamentos de RRHH.
Crear o personalizar un campo con seguimiento
Hay dos vías principales para activar el seguimiento en Odoo: usando Odoo Studio para una solución sin código o mediante Python en un módulo personalizado para desarrollos técnicos.
Usando Odoo Studio
Odoo Studio permite activar el seguimiento sin tocar código. Abre Studio en el modelo correspondiente, selecciona el campo y activa la opción "Track Changes" en la configuración del campo.
Una vez activado, los cambios futuros quedarán registrados automáticamente en el chatter. Es la opción ideal para administradores y usuarios de negocio que desean habilitar trazabilidad sin depender de desarrolladores.
También puedes activar el seguimiento al crear campos nuevos desde Studio; la casilla está disponible durante la creación del campo personalizado.
Usando Python en un módulo personalizado
Para desarrolladores, el seguimiento se añade en la definición del campo dentro de la clase del modelo. Es el método habitual cuando se crean o amplían módulos y se busca un control total mediante código.
Además, el modelo debe heredar de mail.thread para que el seguimiento funcione. Aquí tienes un ejemplo mínimo:
from odoo import models, fields
class ProjectTask(models.Model):
_name = 'project.task'
_inherit = ['project.task', 'mail.thread']
x_client_priority = fields.Selection(
[('low', 'Low'), ('medium', 'Medium'), ('high', 'High')],
string='Client Priority',
tracking=True
)
Este patrón es habitual al extender modelos existentes: el campo se comporta como cualquier otro, pero cada cambio de su valor queda automáticamente registrado en el chatter.
Nota importante sobre modelos personalizados
Al crear modelos nuevos, no olvides incluir _inherit = ['mail.thread', 'mail.activity.mixin'] en la definición. Si no, el parámetro de seguimiento se ignorará silenciosamente y no habrá registros en el chatter.
Este es un error frecuente entre desarrolladores que siguen un tutorial por primera vez: el mixin no es opcional si quieres que el seguimiento funcione.
Buenas prácticas
Configurar el seguimiento es sencillo, pero también fácil de mal utilizar. Estas recomendaciones te ayudarán a sacarle el máximo partido.
Activa solo lo que realmente importe
Marcar todos los campos como trackeados genera ruido en el chatter y dificulta encontrar el historial relevante. Prioriza campos con valor de auditoría: estados, responsables, fechas clave y valores financieros.
Usa prioridades para legibilidad
Cuando haya muchos campos monitorizados en un mismo modelo, asigna números de prioridad (1–10) para controlar cómo se agrupan en el log. Esto mejora la lectura del chatter en modelos con múltiples cambios simultáneos.
Combínalo con controles de acceso
El seguimiento resulta valioso cuando se acompaña de reglas de acceso y permisos adecuados. Mantener una traza no sirve de mucho si cualquiera puede modificar los registros sin control. Asegura roles y reglas antes de confiar en el chatter como mecanismo de auditoría.
Documenta los campos con seguimiento
Mantén un registro claro de qué campos tienen tracking, especialmente en proyectos compartidos o con varios desarrolladores. Esto evita confusiones en revisiones de código y problemas en actualizaciones de módulos.
Prueba antes de desplegar
Verifica el comportamiento en un entorno de staging antes de pasar a producción. Algunos tipos de campo, como los calculados o relacionados, pueden comportarse diferente cuando se intenta rastrearlos.
Errores habituales
Estos son los fallos que más aparecen al trabajar con seguimiento de campos en Odoo.
Olvidar heredarlo de mail.thread
El fallo más común: si un modelo no hereda de mail.thread, el parámetro de seguimiento se ignora sin dar errores y no aparecerán mensajes en el chatter. Revisa la cadena de herencias cuando el tracking no funcione.
Trackear campos calculados no almacenados
Los campos computed solo pueden rastrearse si se almacenan con store=True. Un campo calculado no almacenado no tiene valor persistente en la base de datos, por lo que no hay qué comparar; el seguimiento no tendrá efecto.
Activar tracking en demasiados campos
Puede ser tentador activar tracking por todos lados para ganar transparencia, pero eso ensucia el chatter y dificulta encontrar cambios relevantes. Sé selectivo y céntrate en lo esencial.
Esperar tracking en operaciones fuera del ORM o en masa
El seguimiento se dispara mediante el ORM cuando se usan métodos estándar como write(). Actualizaciones SQL directas, importaciones masivas que evitan el ORM o llamadas de bajo nivel no activarán el tracking. Asegúrate de que las operaciones pasan por el ORM si necesitas registro.
Conflictos entre Studio y definiciones en Python
Si un campo fue creado en Studio con tracking y luego lo modificas desde código, puedes generar incoherencias durante actualizaciones de módulos. Ten cuidado con definiciones duplicadas o contradictorias entre Studio y código.
Preguntas frecuentes
¿Puedo rastrear un campo en cualquier modelo de Odoo?
Solo los modelos que hereden de mail.thread soportan el seguimiento. Muchos modelos estándar ya lo incluyen, pero los personalizados deben declararlo explícitamente en su clase.
¿Activar el seguimiento afecta al rendimiento?
El impacto es reducido en la mayoría de casos: cada cambio crea un registro de mail.message, lo que añade una pequeña sobrecarga al write. En modelos con altísimo volumen transaccional, valora cuántos campos realmente necesitas trackear para evitar una explosión de mensajes.
¿Puedo desactivar el tracking sin perder el historial existente?
Sí. Desactivar el seguimiento evita que se registren nuevos cambios, pero los mensajes ya creados en el chatter permanecen accesibles y no se eliminan.
¿Funciona el seguimiento en campos Many2many?
Sí, Odoo soporta tracking en Many2many. En el chatter se muestra qué registros se añadieron o quitaron de la relación; la representación es distinta a la de campos con valor simple, pero está soportada.
¿Puedo usar tracking sin Odoo Studio?
Por supuesto. tracking es un atributo estándar en la definición de campos en Python. Puedes activarlo desde cualquier módulo personalizado sin Studio; Studio solo ofrece una interfaz visual para la misma funcionalidad subyacente.
Resumen
El atributo de seguimiento es una de esas funcionalidades de Odoo que aportan mucho valor con poca configuración. Bien aplicado, ofrece una traza fiable, reduce disputas sobre cambios y mejora el gobierno de datos en la organización.
Ya sea que lo actives desde Studio para una solución ágil sin código, o lo implementes en Python como parte de un proyecto de desarrollo a medida, el objetivo es el mismo: visibilidad completa de cómo cambian tus datos de negocio con el tiempo.
La clave está en saber dónde aplicarlo. Concéntrate en los campos que influyen en decisiones, aprobaciones y responsabilidades, y obtendrás la mayor parte del beneficio con un esfuerzo contenido.
En Dasolo ayudamos a empresas a implementar, personalizar y optimizar Odoo según sus procesos. Si necesitas diseñar tu modelo de datos, habilitar tracking en tus flujos o desarrollar módulos a medida, nuestro equipo puede acompañarte.
Contacta con nosotros hoy para hablar sobre tu implantación de Odoo. Contáctanos y encontraremos juntos la mejor solución para tu proyecto.