Ir al contenido

Campo Related en Odoo: Guía Completa para Desarrolladores y Usuarios

Guía práctica sobre el campo Relacionado en Odoo: qué es, por qué usarlo y cómo configurarlo en Studio y con Python
6 de marzo de 2026 por
Campo Related en Odoo: Guía Completa para Desarrolladores y Usuarios
Dasolo
| Sin comentarios aún

Introducción


Si has trabajado con el modelo de datos de Odoo, seguro que te has encontrado con situaciones en las que conviene mostrar información de un registro relacionado directamente en un formulario, sin obligar al usuario a abrir otra ficha. El campo Related es la forma declarativa y ordenada que ofrece Odoo para mostrar esos valores en contexto.


En lugar de implementar un campo calculado con código Python, un campo Related recorre una cadena de relaciones ya existente y muestra el valor final. Es una herramienta muy práctica tanto para desarrolladores como para consultores que usan Odoo Studio y necesitan enriquecer formularios sin programar.


Esta guía aclara qué almacena un campo Related, cómo lo gestiona el marco de Odoo, cómo crear y configurar uno desde Studio o con Python, y en qué procesos de negocio suele resultar útil.

¿Qué es el campo Related en Odoo?


Dentro del ORM de Odoo, el campo Related no es un tipo autónomo como Float o Char. Es más bien un atajo que expone un campo perteneciente a otro modelo siguiendo una ruta relacional. El tipo del campo Related se determina por el tipo del campo al que apunta al final de la cadena.


Un ejemplo sencillo: el pedido de venta tiene un campo partner_id (Many2one a res.partner). Definir un campo Related como related='partner_id.country_id' mostrará el país del cliente directamente en el pedido, sin crear una copia independiente de ese dato.

Para el usuario, un campo Related se muestra como cualquier otro campo del formulario: si el campo terminal es un Char, aparecerá como texto; si es un Many2one, como selector; si es Boolean, como casilla. El Related hereda la presentación del campo que refleja.


Por defecto los Related son de solo lectura y no se almacenan en la base de datos. Esto significa que siempre muestran el valor actual del registro origen, pero no se pueden usar en dominios de búsqueda a nivel SQL a menos que actives store=True.


En Odoo Studio puedes añadir un campo Related al crear un nuevo campo en la vista. Seleccionas la ruta relacional y Studio genera el campo con la configuración adecuada, lo que permite a consultores incluir información contextual sin tocar código.

Cómo funciona el campo Related


Al leer un campo Related, Odoo sigue la cadena de nombres separados por puntos. Cada paso intermedio debe ser un campo relacional (Many2one, One2many o Many2many); el campo final puede ser de cualquier tipo.


A continuación tienes un ejemplo práctico de cómo se define un campo Related en un módulo Python:


from odoo import fields, models

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

    partner_country_id = fields.Many2one(
        related='partner_id.country_id',
        string='País del cliente',
        store=True,
    )

En este caso Odoo sigue partner_id hasta el registro res.partner y lee country_id. El resultado es un campo Many2one en el pedido que refleja el país del cliente.


Campos Related almacenados vs no almacenados

Esta es la distinción clave. Por defecto un Related tiene store=False, es decir, se calcula al vuelo cada vez que se lee el registro y no existe como columna en la tabla del modelo.


Si activas store=True, Odoo guarda el valor en la base de datos cuando cambia el origen. Esto permite filtrar, agrupar y buscar por ese campo, algo esencial para informes y vistas árbol.


El inconveniente es que los Related almacenados consumen espacio de base de datos y necesitan disparadores de actualización cuando cambian las fuentes. Odoo gestiona dependencias automáticamente, pero en modelos con muchos registros y actualizaciones frecuentes puede tener impacto en el rendimiento.


Related de solo lectura vs editables

Por defecto son solo lectura. Si pones readonly=False el campo se vuelve editable y, al modificarlo, Odoo escribe el valor hacia atrás en la cadena hasta el registro origen. Esto puede resultar muy útil, pero también sorprendente: editar un campo Related en un pedido puede cambiar el registro del cliente.


Usa campos Related editables solo cuando quieras realmente ese comportamiento de escritura directa. En ciertos contextos (por ejemplo, edición rápida en vistas de lista) es práctico, pero sin la formación adecuada los usuarios pueden alterar datos compartidos sin querer.


Atributos principales del campo

Estos son los parámetros más relevantes al configurar un Related:

  • related: La ruta de campos separada por puntos (por ejemplo, 'partner_id.country_id'). Es el único atributo obligatorio.
  • store: Pónlo a True si quieres persistir el valor en la base de datos para filtrar o agrupar.
  • readonly: Pónlo a False si quieres permitir edición, lo que provocará escritura en la fuente.
  • string: La etiqueta que verá el usuario. Por defecto toma la del campo terminal.
  • depends: Normalmente no hace falta porque Odoo infiere las dependencias desde la cadena related; solo en casos raros hay que especificarlo.

Cómo interactúa con el ORM de Odoo

Leer un Related devuelve el valor del campo terminal del registro enlazado. Si algún eslabón de la cadena está vacío (por ejemplo, partner_id no definido), el campo devuelve False. Este comportamiento aplica a todas las relaciones en el ORM.


Los Related funcionan en dominios, vistas e informes cuando están almacenados. Los no almacenados se pueden mostrar en formularios y listas, pero no sirven como criterio de búsqueda a nivel SQL a menos que la evaluación se haga en Python en el servidor.

Casos de uso en la empresa


El uso de campos Related está presente en numerosos procesos de negocio. A continuación verás varios ejemplos prácticos que se repiten en implementaciones reales.


CRM y ventas: teléfono del cliente en el pedido

El equipo comercial suele pedir ver el teléfono del cliente directamente en la ficha del pedido. Añadir related='partner_id.phone' en sale.order lo muestra al instante, agiliza las llamadas y no requiere desarrollo. En Studio un consultor puede incorporarlo en menos de un minuto.


Contabilidad: moneda de la compañía en líneas de factura

En entornos multiempresa los contables necesitan ver la moneda de la compañía en las líneas de factura para ciertos análisis. Un Related como related='move_id.company_id.currency_id' recorre dos relaciones hasta la moneda. Aunque son cadenas válidas, conviene mantenerlas cortas por rendimiento; almacenar el campo permite filtrar por moneda en informes analíticos.


Inventario: categoría del producto en movimientos

El personal del almacén a menudo necesita ver la categoría del producto en las líneas de movimiento sin abrir la ficha del producto. Un Related en stock.move.line apuntando a product_id.categ_id lo muestra y, con store=True, permite agrupar movimientos por categoría en los informes de inventario.


Fabricación: referencia interna en componentes de orden de trabajo

En producción conviene que las líneas de componentes muestren la referencia interna del producto para evitar errores al elegir piezas similares. Un Related que lea product_id.default_code en las líneas de mrp.workorder sitúa esa referencia justo donde la necesita el operario.


Horas y proyectos: departamento del empleado

Al revisar partes de tiempo, los responsables de proyecto a veces necesitan conocer el departamento del empleado para asignación de costes. Un Related como related='employee_id.department_id' en account.analytic.line muestra el departamento y, almacenado, permite filtrar partes por departamento en análisis de proyectos.

Crear o personalizar un campo Related


Formas de añadir un campo Related


Hay tres vías principales según tu contexto técnico y cómo gestionas el despliegue.

Con Odoo Studio (sin código)

  1. Odoo Studio permite crear Related sin tocar Python. Pasos típicos:
  2. Abre Studio desde el menú principal.
  3. Ve a la ficha donde quieras añadir el campo.
  4. Haz clic en Añadir campo y elige Campo Related.
  5. Selecciona la ruta relacional navegando por los campos disponibles.
  6. Pon la etiqueta y decide si debe almacenarse o ser de solo lectura.

Guarda y cierra Studio.


Studio crea el campo con prefijo x_studio_ y lo sitúa en la vista. Es la forma más rápida para consultores que quieren enriquecer formularios sin cambiar la base de datos manualmente.

Con Python en un módulo personalizado


Para desarrolladores que versionan cambios y despliegan en múltiples entornos, la definición en código es la opción recomendada:

from odoo import fields, models class StockMoveLine(models.Model): _inherit = 'stock.move.line' product_category_id = fields.Many2one( related='product_id.categ_id', string='Categoría de producto', store=True, )


Después de declarar el campo, añádelo a la vista XML correspondiente para que aparezca en la interfaz. Odoo crea la columna en la base de datos al instalar o actualizar el módulo, lo cual asegura mantenibilidad y trazabilidad.

Mediante la API XML-RPC

Si gestionas la configuración de forma automatizada, puedes crear campos Related usando XML-RPC ajustando el atributo related en ir.model.fields:

field_id = models.execute_kw( ODOO_DB, uid, ODOO_API_KEY, 'ir.model.fields', 'create', [{ 'name': 'x_partner_country_id', 'field_description': 'País del cliente', 'model_id': sale_order_model_id, 'ttype': 'many2one', 'relation': 'res.country', 'related': 'partner_id.country_id', 'store': True, 'readonly': True, 'state': 'manual', }] )

Buenas prácticas


Al crear el campo vía API debes indicar ttype y relation manualmente porque la API no infiere el tipo desde la cadena como hace el ORM en Python. Este método es útil para despliegues automatizados y scripts de configuración remota.

1. Almacena el campo si necesitas filtrar o agrupar


Si piensas filtrar la vista por ese campo o agrupar en una tabla dinámica, pon store=True. Sin ello, Odoo no puede ejecutar el filtro en la base de datos y tendría que evaluar todo en Python, lo que no escala. Para campos de solo visualización en formulario, no almacenarlos suele ser suficiente.

2. Mantén la cadena lo más corta posible


Una cadena de dos niveles como partner_id.country_id es clara y eficiente. Cadenas largas (por ejemplo, picking_id.sale_id.partner_id.country_id) aumentan puntos de fallo y dificultan el mantenimiento. Si necesitas lógica compleja o rutas profundas, valora usar un campo calculado con Python.

3. Ten claro qué implica readonly=False


Un Related editable no crea una copia local: modifica la fuente. Si haces editable partner_id.phone en un pedido, el cambio afecta al partner y, por tanto, a todos los documentos relacionados. Asegúrate de que este comportamiento es intencional y comunica a los usuarios qué están editando.

4. Emplea Related para mostrar, no duplicar datos


Los Related sirven para mostrar datos existentes en contexto, no para duplicarlos. Si necesitas una copia independiente que pueda diferir, usa un campo estándar con un valor por defecto o una acción que lo copie, no un Related con store=True y readonly=False.

5. Revisa los derechos de acceso

Errores habituales


Un Related lee a través de otro modelo. Si un usuario no tiene permisos de lectura sobre algún modelo en la cadena, el campo puede aparecer vacío. Esto es comportamiento de seguridad correcto, pero puede confundir. Comprueba que los roles previstos tengan acceso a todos los modelos implicados.

Filtrar por un Related no almacenado


El error más frecuente es añadir un Related a una vista de lista y luego intentar usarlo en un filtro mientras store=False. Sin almacenamiento, Odoo no puede filtrar a nivel SQL y el dominio fallará o no devolverá resultados. Si lo vas a usar en búsquedas o agrupaciones, marca store=True.

Comportamiento inesperado de escritura hacia atrás


Otro fallo habitual es poner readonly=False sin entender que las ediciones afectan al registro origen. Esto ocurre mucho cuando campos Related se crean desde Studio por usuarios no técnicos. Antes de permitir edición, confirma con los responsables de negocio si quieren que los cambios se propaguen.

No tratar los campos intermedios vacíos


Si algún campo intermedio está vacío, el Related devuelve False y en el formulario se verá en blanco. En código que lea el valor conviene manejar ese False para evitar TypeError. En pruebas con datos completos esto pasa desapercibido, pero en producción surge cuando campos opcionales quedan sin rellenar.

Usar Related cuando conviene un campo calculado


Los Related son adecuados para reflejar un único campo a través de relaciones. Si necesitas transformación, condicionales o lógica, es mejor un campo calculado con método Python. Forzar lógica en rutas Related lleva a soluciones frágiles y poco mantenibles.

Problemas de rendimiento con muchos Related almacenados

Conclusión


Cada Related almacenado exige actualizaciones cuando la fuente cambia. Si añades muchos Related almacenados en un modelo grande y las fuentes se actualizan con frecuencia, puedes generar mucha carga de escritura. En desarrollos a escala, mide el impacto y prefiere campos no almacenados cuando la precisión en tiempo real no sea crítica.


El campo Related es una de las herramientas más útiles en Odoo para mostrar información contextual sin duplicarla. Te permite leer por cadenas relacionales, mostrar valores de registros vinculados en cualquier vista y, si hace falta, almacenarlos para informes y filtros.

Saber cuándo usar store=True, cuándo permitir readonly=False y cómo gestionar campos intermedios vacíos te evitará la mayoría de problemas comunes. Tanto si eres desarrollador, consultor de Studio o responsable técnico, dominar el Related mejora la modelización en Odoo.

Si amplías o construyes un modelo de Odoo, los campos Related deben estar en tu caja de herramientas junto a los campos calculados, Many2one y el resto de tipos habituales. En Dasolo ayudamos a empresas a implementar, personalizar y optimizar Odoo en Ventas, Operaciones, Contabilidad y más. Si necesitas apoyo para diseñar tu modelo de datos, añadir campos a tus procesos o extender Odoo con código mantenible, podemos ayudarte. Contáctanos y hablemos sobre cómo apoyar tu proyecto Odoo.

Campo Related en Odoo: Guía Completa para Desarrolladores y Usuarios
Dasolo 6 de marzo de 2026
Compartir esta publicación
Iniciar sesión para dejar un comentario