Ir al contenido

Comprendiendo el Campo Solo Lectura en Odoo: Guía Práctica

Aprende cómo funcionan los campos de solo lectura en el ORM de Odoo, cuándo usarlos y cómo configurarlos con Studio o Python
6 de marzo de 2026 por
Comprendiendo el Campo Solo Lectura en Odoo: Guía Práctica
Dasolo
| Sin comentarios aún

Los campos de solo lectura son una de esas características en Odoo que parecen sencillas al principio, pero juegan un papel mucho más importante de lo que la mayoría de los usuarios espera.


Ya sea que seas un usuario empresarial preguntándote por qué ciertos campos están atenuados, o un desarrollador buscando controlar el comportamiento de los campos en tu personalización de Odoo, esta guía cubre todo lo que necesitas saber.

Entender cómo funcionan los campos de solo lectura es clave para construir flujos de trabajo confiables, proteger la integridad de los datos y ofrecer una experiencia más fluida para tu equipo.


Este tutorial sobre campos de Odoo recorre tanto los aspectos empresariales como técnicos de solo lectura, así que, ya sea que estés configurando Odoo o construyendo sobre él, aquí encontrarás lo que necesitas.

¿Qué es el campo de solo lectura en Odoo?


Un campo de solo lectura en Odoo es un campo que muestra un valor pero no puede ser editado directamente por el usuario a través de la interfaz. Los datos son visibles, pero la entrada está bloqueada.


En la vista de formulario, los campos de solo lectura suelen aparecer como texto plano en lugar de cuadros de entrada interactivos. Dependiendo del tema de Odoo, pueden verse ligeramente atenuados o simplemente planos en comparación con los campos editables.

Dentro del modelo de datos de Odoo, el comportamiento de solo lectura se puede aplicar en dos niveles distintos:


  • A nivel de campo (Python/ORM): el campo es siempre de solo lectura en todas las vistas y contextos.
  • A nivel de vista (XML): el campo es de solo lectura en una vista específica o bajo condiciones específicas.

Esta distinción es importante. Un campo marcado como de solo lectura a nivel de ORM no puede ser editado a través de ninguna interfaz de usuario. Un campo marcado como de solo lectura a nivel de vista está protegido en ese contexto particular, pero aún puede ser editable en otras vistas o a través de código del lado del servidor.


Readonly no es un tipo de campo por sí mismo. Es un atributo que se puede aplicar a cualquiera de los tipos de campo estándar de Odoo: Char, Integer, Float, Many2one, Date, y otros. Esta es una parte fundamental del marco de Odoo para controlar cómo se comportan los campos en tiempo de ejecución.

Cómo funciona el campo de solo lectura


Para entender cómo se comportan los campos de solo lectura, ayuda mirar ambos lados: el ORM de Odoo (Python) y la capa de vista (XML).


Readonly a nivel de ORM

En el ORM de Odoo, un campo puede declararse como permanentemente de solo lectura directamente en el modelo de Python. Esto es más común para campos calculados que derivan su valor de otros datos. La definición del campo incluye readonly=True como un parámetro, y Odoo nunca permitirá que el usuario lo edite a través de la interfaz.


Este nivel de solo lectura es parte de la API de campos de Python de Odoo y está documentado en la guía oficial para desarrolladores de Odoo. Se aplica globalmente, independientemente de qué vista se esté utilizando.


Readonly basado en estado

Uno de los patrones más comunes en el desarrollo de Odoo es hacer que un campo sea de solo lectura en función del estado actual de un documento. Así es como módulos estándar como Ventas, Compras y Contabilidad bloquean sus datos una vez que un documento pasa la etapa de borrador.


En Odoo 16 y versiones anteriores, esto se hacía utilizando el atributo attrs en XML de vista, combinando una condición de dominio con el elemento de campo. En Odoo 17 y versiones posteriores, la sintaxis es más concisa y se escribe directamente como una expresión en línea en el elemento de campo.


Ambos enfoques logran el mismo resultado: el campo es editable mientras el documento está en borrador y se bloquea una vez que avanza a través del flujo de trabajo. Este es un concepto fundamental en cualquier tutorial técnico de Odoo que cubra la configuración de campos.


Campos Computados y Solo Lectura

Los campos computados de Odoo son de solo lectura por defecto. Cuando defines un campo con un método compute, Odoo asume que no debe ser editado directamente porque su valor se deriva automáticamente de otros campos.


Si deseas que un campo computado también se almacene, debes establecer tanto el parámetro compute como store=True. Estos campos de base de datos de Odoo almacenados son un patrón común para la optimización del rendimiento, ya que pueden ser utilizados en filtros de búsqueda y ordenados de manera eficiente a nivel de base de datos sin recalcular valores sobre la marcha.


Haciendo un Campo Computado Editable

Si necesitas que un campo computado también acepte entrada manual, puedes definir un método inverso junto a él. El método inverso le dice a Odoo qué hacer cuando un usuario escribe un valor en el campo computado. Sin un inverso, el campo permanece de solo lectura por defecto. Esto es parte de la API de tipos de campo ORM de Odoo más avanzada y se cubre en profundidad en la guía del desarrollador de Odoo.

Casos de uso empresarial


Los campos de solo lectura aparecen en todos los módulos de Odoo. Aquí hay cinco ejemplos prácticos de flujos de trabajo empresariales reales.


1. CRM: Bloqueando Datos de Oportunidades Ganadas y Perdidas

En el módulo CRM, los ingresos esperados y la fecha de cierre son editables mientras se trabaja en un lead. Una vez que una oportunidad se marca como Ganada o Perdida, estos campos se establecen como de solo lectura para preservar un registro preciso de lo que se cerró y a qué valor.


Esto evita que alguien vuelva y ajuste cifras después del hecho, lo que distorsionaría los informes de ventas y la analítica del pipeline.


2. Ventas: Protegiendo Líneas de Pedido Confirmadas

Cuando una orden de venta pasa de Borrador a Confirmada, las líneas de la orden se vuelven de solo lectura. Los usuarios ya no pueden cambiar el producto, la cantidad o el precio después de que el cliente ha recibido una confirmación.


Si realmente se necesitan cambios, la orden debe restablecerse explícitamente a borrador, lo que crea un rastro de auditoría y hace que la corrección sea intencionada en lugar de accidental.


3. Inventario: Cantidades de Movimiento de Stock Validadas

En las operaciones de almacén, una vez que se valida una entrega o recepción, las cantidades realizadas se bloquean. Esto protege la integridad de la valoración del stock y asegura que los registros coincidan con lo que se movió físicamente a través del almacén.


Las cantidades editables después de la validación podrían corromper silenciosamente los niveles de inventario en múltiples ubicaciones.


4. Contabilidad: Líneas de Asiento Contable Publicadas

En contabilidad, una vez que se publica un asiento contable, todas sus líneas se vuelven de solo lectura. Este es un requisito legal en muchos países y un principio fundamental de la contabilidad por partida doble.


Permitir ediciones después de la publicación comprometería la fiabilidad de los estados financieros y crearía serios riesgos de cumplimiento.


5. Fabricación: Datos de Orden de Trabajo Completada

En el módulo de Fabricación, una vez que una orden de trabajo se marca como finalizada, la duración real y las cantidades producidas se establecen como de solo lectura. Esto preserva registros de producción precisos que alimentan el análisis de costos y el seguimiento del rendimiento.

Creación o personalización de un campo de solo lectura


Hay dos caminos principales para configurar campos de solo lectura en Odoo: usar Odoo Studio para un enfoque sin código, o escribir Python y XML directamente para un control técnico completo.


Usando Odoo Studio

Los campos de Odoo Studio facilitan la adición o modificación del comportamiento de solo lectura sin necesidad de escribir código. Para configurar un campo como de solo lectura utilizando Studio:

  1. Abre Odoo Studio desde el menú principal (el icono de lápiz)
  2. Navega hasta la vista de formulario donde deseas configurar el campo
  3. Haz clic en el campo que deseas modificar
  4. En el panel de propiedades del lado derecho, activa la opción "Solo lectura"
  5. Guarda y cierra Studio

Studio también te permite establecer un comportamiento condicional de solo lectura utilizando expresiones de dominio. Por ejemplo, puedes hacer que un campo sea de solo lectura solo cuando un campo de estado sea igual a un valor específico, sin escribir una sola línea de código.


El enfoque de crear campos en Odoo Studio es la elección correcta para consultores y administradores que necesitan imponer reglas de datos de manera rápida y segura. Los cambios realizados a través de Studio se almacenan en la base de datos y no serán sobrescritos por actualizaciones de módulos.


Uso de Python para personalización técnica

Para los desarrolladores que construyen módulos personalizados de Odoo, el atributo de solo lectura se establece directamente en la definición del campo en el modelo de Python. Este es el uso estándar de campos de Python en Odoo y se cubre en cada guía para desarrolladores de Odoo.


Puedes establecer readonly=True como un parámetro estático en cualquier tipo de campo, haciéndolo permanentemente no editable. Para un control más flexible, el parámetro states te permite definir en qué estados de documento el campo debe ser editable frente a solo lectura.


Este enfoque es particularmente útil cuando estás añadiendo campos personalizados a modelos existentes de Odoo como parte de un proyecto de personalización de Odoo. Mantiene la lógica del campo cerca del modelo de datos en lugar de dispersa en múltiples archivos de vista.


Uso de Atributos de Vista XML

Para el comportamiento de solo lectura a nivel de vista, agregas el atributo readonly directamente al elemento del campo en tu XML de vista. Esto es parte del flujo de trabajo estándar de desarrollo de Odoo para cualquier personalización técnica.

La ventaja de solo lectura a nivel de vista es la flexibilidad: el mismo campo puede comportarse de manera diferente en diferentes vistas, o bajo diferentes condiciones, sin cambiar la definición subyacente del campo. Este es a menudo el enfoque preferido cuando necesitas agregar restricciones a campos estándar existentes sin modificar su definición en Python.


En Odoo 17, la sintaxis de expresión en línea para condiciones de solo lectura es más limpia y legible que la sintaxis de diccionario attrs utilizada en versiones anteriores. Ambos enfoques son válidos dependiendo de qué versión de Odoo estés utilizando.

Mejores prácticas


Usar campos de solo lectura correctamente se reduce a aplicarlos en el nivel adecuado, por la razón correcta. Aquí están las pautas más importantes desde una perspectiva de consultoría de Odoo.


1. Preferir Solo Lectura a Nivel de Vista Cuando el Contexto Varía

Si un campo necesita ser solo lectura solo en ciertos estados de documento o en vistas específicas, aplica el solo lectura a nivel de vista en lugar de a nivel de modelo. Esto mantiene tu modelo de datos de Odoo flexible y permite que los procesos de backend o integraciones de API aún puedan escribir en el campo cuando sea necesario.


2. Alinear las Condiciones de Solo Lectura con el Ciclo de Vida del Documento

Tus condiciones de solo lectura deben coincidir con el flujo natural de tus documentos. Los campos deben bloquearse cuando el documento alcanza un estado en el que más ediciones causarían problemas. Esto crea una experiencia predecible e intuitiva para los usuarios, que es una de las características distintivas de una personalización de Odoo bien implementada.


3. Probar a Través de Roles de Usuario

El comportamiento de solo lectura puede interactuar con los derechos de acceso de maneras inesperadas. Siempre prueba tu configuración tanto como un usuario estándar como un administrador para verificar que el campo se comporte correctamente para cada rol. Lo que parece ser solo lectura para un grupo de usuarios podría seguir siendo editable para otro dependiendo de su perfil.


4. Combinar Solo Lectura con Requerido Donde Tenga Sentido

En formularios de múltiples etapas, un campo puede ser obligatorio en el borrador pero de solo lectura en estados posteriores. Puedes combinar ambos atributos en tu XML de vista para hacer cumplir este patrón de manera clara. Esto es común para campos como fechas de entrega o números de referencia que deben ser completados antes de que se confirme un documento.


5. Documenta tu lógica de solo lectura

En el desarrollo personalizado de Odoo, especialmente en modelos de datos complejos, siempre añade un comentario explicando por qué un campo es de solo lectura. Los futuros desarrolladores que mantengan el código necesitan entender la razón empresarial detrás de la restricción, no solo la implementación técnica.


6. Usa campos de Studio para cambios rápidos y seguros ante actualizaciones

Para casos de uso sencillos, los campos de Odoo Studio ofrecen una forma rápida y segura ante actualizaciones de añadir comportamiento de solo lectura. Reserva la personalización en Python para casos donde Studio no pueda proporcionar la lógica requerida, como condiciones complejas entre campos o integración con campos computados personalizados.

Errores comunes


Incluso los usuarios y desarrolladores experimentados de Odoo se enfrentan a los mismos problemas con los campos de solo lectura. Aquí están los que vale la pena conocer antes de que te tomen por sorpresa.


Confundir la propiedad de solo lectura a nivel de vista con un límite de seguridad

Un campo establecido como de solo lectura en una vista no impide actualizaciones a través de la API XML-RPC, llamadas de escritura ORM en Python o acciones del servidor. La propiedad de solo lectura a nivel de vista es una restricción de UI, no un control de seguridad. Si realmente necesitas prevenir todas las escrituras en un campo, debes hacer cumplir eso a nivel de ORM o a través de reglas de control de acceso, no solo en la vista.


Hacer campos permanentemente de solo lectura cuando condicional sería mejor

Es tentador bloquear un campo completamente cuando quieres protegerlo. Pero si los usuarios necesitan legítimamente editarlo en ciertas situaciones, como al restablecer un documento a borrador, un solo lectura permanente a nivel de ORM los bloqueará por completo, incluyendo cualquier flujo de trabajo de corrección. Siempre piensa en el ciclo de vida completo antes de elegir permanente sobre condicional.


Olvidar los métodos Onchange

Si un campo de solo lectura también se referencia en un onchange, ese método aún puede intentar asignarle un valor. Esto puede producir un comportamiento confuso donde el campo parece actualizarse durante la interacción del usuario pero luego se revierte o desencadena un error. Asegúrate de que tu lógica onchange tenga en cuenta los campos de solo lectura.


No aplicar readonly de manera consistente en todas las vistas

Un campo marcado como readonly en la vista de formulario podría seguir siendo editable en la vista de lista o en la vista kanban si esas vistas no incluyen la misma restricción. Siempre verifica que tu configuración de readonly se aplique de manera consistente en cada vista donde aparece el campo.


Efectos secundarios al heredar modelos estándar

Al heredar de un modelo estándar de Odoo y agregar readonly=True a un campo existente, este cambio afecta a todas las vistas que muestran ese campo, incluidas las estándar. Asegúrate de que esto sea intencional y que no rompa el comportamiento estándar de Odoo o entre en conflicto con otras personalizaciones en el mismo modelo.


Conclusión


Los campos readonly son una herramienta fundamental en Odoo para guiar a los usuarios a través de los flujos de trabajo, proteger la integridad de los datos y hacer cumplir las reglas comerciales sin depender únicamente de la capacitación.


La clave es saber cuándo aplicar readonly a nivel de vista frente a nivel de modelo, y asegurarse de que las condiciones se alineen con cómo trabaja realmente tu equipo. Un modelo de datos de Odoo bien configurado siempre hace un uso reflexivo de los campos readonly en los momentos adecuados del ciclo de vida del documento.


Ya sea que los configures a través de Odoo Studio para un enfoque sin código o los definas directamente en Python y XML como parte de un proyecto de desarrollo más amplio de Odoo, la lógica detrás de los campos readonly sigue siendo consistente: mostrar los datos, pero protegerlos de cambios no intencionados.


Puede que no sean el tema más discutido en la personalización de Odoo, pero son silenciosamente uno de los más impactantes.

En Dasolo, ayudamos a las empresas a implementar, personalizar y optimizar Odoo en todos los módulos e industrias. Si necesitas ayuda configurando campos, diseñando flujos de trabajo confiables o mejorando tu modelo de datos de Odoo, nuestro equipo está listo para apoyarte. Ponte en contacto y cuéntanos sobre tu proyecto.

Comprendiendo el Campo Solo Lectura en Odoo: Guía Práctica
Dasolo 6 de marzo de 2026
Compartir esta publicación
Iniciar sesión para dejar un comentario