Ir al contenido

Campos de Contexto en Odoo: Guía Práctica

Descubre de qué manera el contexto modifica el comportamiento de los campos, los valores por defecto y la selección de registros dentro del ORM de Odoo
6 de marzo de 2026 por
Campos de Contexto en Odoo: Guía Práctica
Dasolo
| Sin comentarios aún

Si has trasteado con el ORM de Odoo o con la personalización de vistas, seguro que te has topado con la palabra context. Aparece en definiciones de campos, en atributos XML de vistas y a lo largo del código Python. Para muchos consultores y desarrolladores es algo que funciona hasta que deja de hacerlo, porque su comportamiento puede resultar opaco si no se entiende bien.


Dominar el uso del contexto en Odoo no es teoría: afecta directamente a cómo se comporta el modelo de datos, qué valores aparecen por defecto en un formulario, qué registros se muestran en listados y cómo se calculan campos dependientes. Tanto si haces una pequeña personalización de Odoo como si desarrollas un módulo entero, controlar el contexto te ahorra mucho tiempo de depuración.


Esta guía explica de forma práctica qué es el contexto, cómo circula por el framework de Odoo y cómo aplicarlo correctamente en proyectos reales.

¿Qué es el contexto en Odoo?


En Odoo, el contexto es básicamente un diccionario de Python que acompaña a cada petición, llamada de método y operación sobre registros. No es un tipo de campo: no encontrarás fields.Context() en el ORM. Su función es alterar el comportamiento de campos y operaciones sin cambiar la estructura del modelo.


Imagina el contexto como notas adhesivas invisibles que viajan con la operación: indican que un campo debe venir precargado, que se muestren también registros archivados, que una descripción se traduzca a otro idioma o que al abrir un selector se aplique un filtro concreto.


Dónde aparece el contexto

El contexto se utiliza en tres lugares principales dentro del modelo de datos de Odoo:

  • En la definición de campos en Python: Muchos2one, One2many y Many2many aceptan un parámetro context al declararlos.
  • En atributos XML de vistas: El atributo context en etiquetas <field> dentro de formularios, listas o kanban.
  • En el entorno del ORM: Disponible como self.env.context en Python y modificable con self.with_context(key=value).

En los tres casos la idea es la misma: el contexto transporta información adicional que condiciona cómo se comporta un campo o registro en tiempo de ejecución.

Cómo funciona el contexto dentro del modelo de datos de Odoo


El contexto fluye con la petición del usuario desde que abre un formulario hasta que guarda un registro. A continuación verás los mecanismos clave y cómo se usan en la práctica.


Valores por defecto con default_*

Un patrón habitual es usar claves que comienzan por default_. Cuando el contexto incluye default_nombre_campo, Odoo usa ese valor para prellenar el campo al crear un registro nuevo desde un formulario.

Por ejemplo, si un botón abre un formulario de pedido y en el contexto se pasa {"default_partner_id": 42}, el campo cliente aparecerá ya seleccionado con el partner 42. El formulario llega al usuario con el valor aplicado sin añadir lógica Python adicional.


Este patrón se usa mucho en el desarrollo de Odoo para crear flujos navegación que resultan naturales para el usuario.


El atributo context en campos relacionales

Al definir un Many2one, One2many o Many2many en Python puedes indicar un context. Ese contexto se aplica cada vez que el campo carga o crea registros desde su ventana emergente o selector.


Ejemplo práctico: un Many2one a res.partner con context={"default_is_company": True} hará que, si el usuario crea un partner desde ese selector, la casilla "Es empresa" venga marcada por defecto. Es una sugerencia para guiar la entrada de datos, no una imposición.


Contexto en vistas XML

En las vistas XML el atributo context en una etiqueta de campo funciona igual, pero puede evaluarse dinámicamente. Puedes referenciar otros campos usando la sintaxis de evaluación de Odoo.


Con esto construyes formularios inteligentes donde el comportamiento de un campo depende de otro sin necesidad de escribir código Python adicional; es una técnica central en muchas personalizaciones de Odoo.


Leer y modificar el contexto en Python

Dentro de cualquier método de modelo puedes consultar el contexto con self.env.context, que devuelve el diccionario tal como estaba al llamar al método.


Si necesitas ejecutar código con un contexto distinto, usa self.with_context(key=value). Esto devuelve un nuevo recordset que lleva el contexto actualizado sin modificar el original: un patrón limpio y no destructivo acorde con el estilo funcional de Odoo.


Claves de contexto incorporadas comunes

Odoo define varias claves de contexto reconocidas que alteran comportamientos en el framework:


  • lang: fuerza el idioma para valores traducidos.
  • active_test: al ponerlo a False se incluyen registros archivados en búsquedas.
  • no_recompute: evita la recalculación de campos almacenados por un tiempo.
  • mail_notrack: desactiva el registro en el chatter de una escritura.
  • allowed_company_ids: controla visibilidad en multiempresa.
  • bin_size: devuelve tamaños en lugar de contenido binario en campos Binary.

Conocer estas claves propias de Odoo forma parte de cualquier buen manual de desarrollo porque permiten controlar detalles sin tocar lógica personalizada.

Casos de uso en empresas


El contexto no es sólo una herramienta para desarrolladores: resuelve problemas reales de flujo en múltiples áreas del negocio. Aquí tienes cinco ejemplos típicos en implementaciones Odoo.


1. CRM: prellenar el equipo de ventas en nuevos leads

Si un gestor está viendo el kanban de su equipo y pulsa "Nuevo", espera que el lead quede asignado a su equipo. Pasando default_team_id en el contexto de la acción, el formulario se abre con el equipo ya seleccionado, evitando asignaciones erróneas.


2. Ventas: fijar la tarifa según el segmento de cliente

Al crear un presupuesto desde la vista de una categoría de clientes, el campo de lista de precios puede venir preestablecido mediante default_pricelist_id en el contexto. Orienta al vendedor sin limitar su libertad de cambiarlo.


3. Almacén: filtrar ubicaciones en pedidos de transferencia

En operaciones logísticas, en el formulario de transferencia el campo de ubicación origen puede usar contexto para mostrar sólo las ubicaciones de un almacén concreto, mediante un dominio pasado en el contexto del Many2one. Así se reduce el ruido y se minimizan errores en setups multi-almacén.


4. Contabilidad: líneas de factura en el idioma del cliente

Al facturar a clientes internacionales, la clave lang asegura que las descripciones traducidas aparezcan en el idioma del cliente. Una factura emitida a un cliente francés mostrará nombres y descripciones en francés aunque la base esté en otro idioma.


5. Modelos personalizados: mostrar productos archivados en una vista específica

Un equipo de operaciones necesita revisar productos descontinuados junto a los activos. Una vista de lista personalizada puede pasar active_test: False en el contexto de la acción para mostrar todos los productos sin tocar el código Python global.

Crear y ajustar el contexto en campos


Existen dos formas de añadir o ajustar contexto en campos: usar Odoo Studio para soluciones sin código, o editar Python y XML para control técnico completo. Esto es un punto clave en cualquier tutorial técnico de Odoo sobre comportamiento de campos.


Usar Odoo Studio

Odoo Studio permite alterar ciertas propiedades de campos sin programar. Para campos relacionales ofrece una opción de configuración de contexto donde puedes poner valores por defecto aplicables al crear un registro desde ese campo.


Es ideal para casos sencillos: prellenar compañía, equipo, categoría o usuario responsable. Su limitación es que el soporte de contexto en Studio está simplificado; para contextos dinámicos que dependan de otros campos necesitarás la vía técnica.


Cuando trabajes con campos creados en Odoo Studio, recuerda que el contexto se guarda en la vista. Si luego añades personalizaciones técnicas sobre la misma vista, debes revisar y armonizar el contexto definido por Studio para evitar conflictos.


Definir contexto en campos desde Python

En un módulo personalizado añades contexto directamente en la definición del campo. Para un Many2one, el parámetro context acepta un diccionario estático:


Ese contexto estático se aplica siempre que el campo cargue o cree registros relacionados; no cambia en función del estado del registro. Si necesitas que el contexto reaccione al registro actual, la lógica debe moverse al nivel de la vista.


Definir contexto en vistas XML

En XML de vista el atributo context acepta una cadena que Odoo evalúa en tiempo de ejecución. Puedes referenciar valores de otros campos, el ID del usuario (uid), el registro activo (active_id) y otras variables:

Esto hace que el contexto a nivel de vista sea más flexible que el contexto en la definición del campo. Es la práctica habitual en el framework de Odoo para formularios donde el comportamiento de un campo depende del estado de otro, y la forma de crear comportamientos de campos en Odoo que resulten naturales para el usuario.


Pasar contexto a través de acciones de ventana

También puedes establecer contexto en registros ir.actions.act_window. Así es como menús y botones transmiten contexto a las vistas que abren. El campo context de la acción se fusiona con el contexto de sesión al cargar la vista.


Es la forma más limpia para casos como el ejemplo del equipo de ventas: el contexto vive en la acción y no en la definición del campo, lo que permite tener distintos valores por defecto según la navegación sin tocar el modelo.

Buenas prácticas


Trabajar con contexto en Odoo resulta mucho más manejable si adoptas algunos hábitos consistentes, válidos tanto para módulos como para personalizaciones rápidas.


  • Usa el contexto para sugerir, no para forzar. Los defaults por contexto orientan al usuario sin bloquearlo. Si necesitas una restricción estricta, utiliza un domain o un onchange.
  • Pon el contexto dinámico en las vistas, no en las definiciones de campo. El contexto a nivel de campo es estático; si debe reflejar el estado del registro, ubícalo en XML de vista.
  • Emplea with_context() en lugar de modificar env.context directamente. El entorno está pensado para ser inmutable durante una llamada; crea uno nuevo con with_context() en vez de mutar el existente.
  • Pasa solo lo necesario en el contexto. Las claves del contexto se acumulan a lo largo de la pila de llamadas; llevar datos innecesarios puede producir efectos laterales inesperados.
  • Utiliza el contexto para flags de lógica condicional. Un patrón habitual es pasar banderas booleanas como from_wizard: True y comprobarlas en computes o onchanges para variar comportamiento sin introducir campos en el modelo que representen estado de flujo.
  • Documenta las claves de contexto personalizadas en tu módulo. Las claves de contexto son invisibles salvo que sepas buscarlas. Añade comentarios o docstrings explicando las claves que tu módulo lee o escribe; te ahorrará tiempo cuando vuelvas al código.

Errores habituales


Los bugs relacionados con contexto son difíciles de encontrar porque el contexto no se muestra en la interfaz. Estos son los errores que más se repiten en proyectos reales.


Tratar default_* como valores obligatorios

Un valor por defecto puesto vía contexto solo se aplica cuando el registro se crea desde un formulario con ese contexto. Si creas registros por código sin pasar el contexto, ese default no se aplicará. Algunos desarrolladores confunden estos defaults con los parámetros default de Python; no funcionan igual. Si te importan esos defaults, pásalos explícitamente al crear registros desde código.


Mutar el diccionario de contexto directamente

El diccionario de contexto se comparte en la pila de llamadas. Si modificas self.env.context en lugar de usar with_context(), puedes alterar el comportamiento de otro código en la misma transacción. La práctica correcta es crear un nuevo entorno con with_context() que copia el contexto y añade tus cambios.


Pasar demasiado en el contexto

Cada clave que añades viaja por toda la cadena de llamadas y puede activar comportamientos de Odoo que buscan claves concretas. Añadir claves inesperadas puede activar esas ramas por accidente. Mantén el contexto pequeño y específico para la operación inmediata.


Olvidar active_test al buscar registros archivados

Por defecto, search() y search_read() filtran los registros archivados. Si necesitas incluirlos debes pasar active_test: False en el contexto; dejarlo fuera es un fallo frecuente en personalizaciones de inventario y gestión de productos.


Conflictos de contexto entre Studio y código personalizado

Si Odoo Studio ha dejado contexto en una vista y después añades una extensión técnica sobre el mismo campo, los contextos pueden entrar en conflicto o uno puede sobrescribir al otro según el orden de fusión XML. Revisa siempre el contexto existente antes de añadir el tuyo al heredar vistas; es un problema habitual al mezclar campos creados con Odoo Studio y personalizaciones por módulo.

Resumen


El contexto es una de esas piezas invisibles de Odoo que hacen mucho trabajo en silencio. Entender cómo fluye por definiciones de campo, atributos de vista y el entorno del ORM te da un control mucho más fino sobre el comportamiento del modelo de datos.


Puntos clave: usa claves default_* para orientar al usuario sin forzar; sitúa el contexto dinámico en vistas y no en la definición de campos; usa with_context() en vez de mutar el contexto; y mantén el contexto ligero para evitar interferencias inesperadas.

Ya sea que consultes un tutorial de campos en Odoo, desarrolles un módulo o depures un campo irregular, comprender el contexto será siempre parte de la solución.


En Dasolo ayudamos a empresas a implementar, personalizar y optimizar Odoo para que encaje con sus procesos reales. Si estás trabajando en una personalización donde el contexto juega un papel y dudas de si lo estás usando bien, o simplemente quieres comentar tu implementación, podemos asesorarte.

Contacta con nuestro equipo a través de la página de contacto y cuéntanos qué necesitas construir. Trabajamos con empresas de todos los tamaños para que Odoo funcione como debe.

Campos de Contexto en Odoo: Guía Práctica
Dasolo 6 de marzo de 2026
Compartir esta publicación
Iniciar sesión para dejar un comentario