Ir al contenido

Valor Predeterminado en Campos de Odoo: Guía Completa

Cómo rellenar automáticamente los campos en Odoo, desde valores estáticos hasta valores predeterminados conscientes del contexto y cálculos dinámicos
6 de marzo de 2026 por
Valor Predeterminado en Campos de Odoo: Guía Completa
Dasolo
| Sin comentarios aún

Introducción


Cada formulario en Odoo tiene campos. Algunos necesitan ser completados manualmente cada vez. Pero muchos campos pueden recibir un valor predeterminado sensato para que los usuarios comiencen con algo útil ya en su lugar. El mecanismo de valor predeterminado en Odoo es simple en la superficie, pero tiene varias capas que vale la pena entender, especialmente cuando estás configurando o personalizando formularios para tu equipo.


Ya seas un usuario empresarial ajustando un campo a través de Odoo Studio o un desarrollador trabajando en un tutorial de campos de Odoo, saber cómo funcionan los valores predeterminados ahorra tiempo y previene el tipo de errores de configuración silenciosos que son difíciles de diagnosticar más tarde.


Esta guía cubre qué son los valores predeterminados en Odoo, cómo funcionan a nivel de ORM, cuándo usar valores predeterminados estáticos frente a dinámicos, y cómo configurarlos a través de Odoo Studio o código Python.

¿Qué es el valor predeterminado en Odoo?


En el ORM de Odoo, un valor predeterminado es lo que se asigna a un campo cuando se crea un nuevo registro, antes de que el usuario complete algo. No es una restricción. El usuario puede cambiarlo libremente. Simplemente es un punto de partida que hace que el formulario sea más útil desde el principio.


El parámetro default está disponible en prácticamente todos los tipos de campo en el marco de Odoo: Char, Integer, Float, Boolean, Date, Many2one, Selection y otros. Puede ser un valor simple, una lambda de Python o una referencia a un método. Todos estos cuentan como mecanismos de valor predeterminado válidos dependiendo del caso de uso.


En Odoo Studio, los valores predeterminados aparecen en el panel de propiedades del campo como una entrada simple. Los usuarios de negocio pueden establecer un valor predeterminado estático sin escribir ningún código. Esto lo convierte en una de las formas más accesibles de mejorar la consistencia de los datos utilizando los campos de Odoo Studio, sin requerir la participación de un desarrollador.


A nivel de base de datos, los valores predeterminados no se almacenan en la columna del campo en sí. Viven ya sea en la definición del modelo de Python o en los registros de ir.default en la base de datos, dependiendo de cómo se configuraron. Cuando se crea un nuevo registro, Odoo lee esos valores predeterminados y pre-rellena el formulario antes de que el usuario lo vea.

Cómo funciona el valor predeterminado


Cuando un usuario abre un nuevo formulario en Odoo, el marco llama a default_get() en el modelo. Este método recopila todos los valores predeterminados de los campos y devuelve un diccionario que mapea los nombres de los campos a sus valores predeterminados. El formulario luego pre-rellena esos campos antes de que el usuario haga algo.

Hay cuatro tipos principales de valores predeterminados en Odoo, cada uno cubriendo un escenario diferente.


Valores Predeterminados Estáticos

Un valor fijo codificado en la definición del campo o establecido a través de Studio. Por ejemplo, establecer un campo Booleano en True por defecto, o un campo de Selección en 'draft'. Estos son el tipo más simple y cubren la mayoría de los casos de uso cotidianos en un modelo de datos de Odoo.


Valores Predeterminados Dinámicos a través de Lambda o Método

Una función o lambda de Python que se ejecuta en el momento de la creación del registro. Esto permite valores predeterminados que dependen de la fecha actual, el usuario conectado o cualquier otro contexto disponible. Por ejemplo, establecer al usuario actual como la persona responsable por defecto, o usar hoy como la fecha del documento por defecto.


Aquí está cómo se ven los valores predeterminados estáticos y dinámicos en una definición de modelo de Python, siguiendo el patrón de desarrollo estándar de Odoo:


from odoo import fields, models

class CrmLead(models.Model):
    _inherit = 'crm.lead'

    # Valor predeterminado estático
    x_priority_level = fields.Selection(
        [('low', 'Bajo'), ('medium', 'Medio'), ('high', 'Alto')],
        string='Nivel de Prioridad',
        default='medium',
    )

    # Valor predeterminado dinámico: usuario actual
    x_assigned_by = fields.Many2one(
        'res.users',
        string='Asignado Por',
        default=lambda self: self.env.user,
    )

    # Valor predeterminado dinámico: fecha de hoy
    x_expected_date = fields.Date(
        string='Fecha de Cierre Esperada',
        default=lambda self: fields.Date.today(),
    )

Valores Predeterminados Basados en el Contexto

Valores pasados a través del contexto de acción utilizando la convención default_field_name. Cuando haces clic en Crear desde dentro de un registro relacionado, Odoo a menudo pasa valores de contexto que se convierten en predeterminados para campos relacionales. Por ejemplo, abrir una nueva tarea desde dentro de un proyecto establece automáticamente el campo del proyecto. Esto es parte de cómo funcionan los flujos de navegación en el marco de Odoo y está impulsado completamente por claves de contexto que cualquier desarrollador o usuario avanzado puede configurar.


Valores predeterminados a nivel de usuario a través de ir.default

Odoo también admite valores predeterminados específicos del usuario a través de registros ir.default. Un administrador puede configurar un valor predeterminado personal para un campo dado en un modelo dado. Cuando ese usuario crea un nuevo registro, su valor predeterminado personal tiene prioridad sobre el valor predeterminado a nivel de modelo. Esto es útil en entornos multiusuario donde diferentes miembros del equipo tienen diferentes preferencias de trabajo, y es una de las capacidades menos conocidas del ORM de Odoo.


Orden de prioridad

Cuando existen múltiples fuentes predeterminadas para el mismo campo, Odoo las resuelve en este orden: primero ir.default específico del usuario, luego ir.default a nivel de empresa, y luego el valor predeterminado definido en el modelo de Python. Los valores predeterminados basados en contexto pasados en tiempo de ejecución también anulan los valores predeterminados a nivel de modelo. Conocer este orden te ayuda a entender por qué un campo podría no estar mostrando el valor que esperas cuando abres un nuevo formulario.

Casos de uso empresarial


Los valores predeterminados aparecen en prácticamente todos los módulos de una implementación de Odoo. Aquí hay cinco ejemplos prácticos de flujos de trabajo empresariales reales.


CRM: Vendedor predeterminado en nuevos leads

Cuando un vendedor crea un nuevo lead u oportunidad, el campo Responsable se establece de forma predeterminada en el usuario actual. Esto evita que cada lead comience sin asignar y requiera atribución manual. El valor predeterminado se establece con lambda self: self.env.user en la definición del modelo. En la práctica, este pequeño detalle mejora la adopción del CRM porque los usuarios ven inmediatamente sus propios leads sin ningún paso adicional.


Ventas: Términos de pago predeterminados en pedidos

Cuando se crea un pedido de venta para un cliente, campos como la lista de precios y los términos de pago se establecen de forma predeterminada según la configuración del socio cliente. Un cliente configurado con términos de pago Net 30 tendrá esos términos prellenados en cada nuevo pedido. Esto reduce los errores de selección manual y asegura que los términos acordados con cada cliente se apliquen de manera consistente, incluso cuando diferentes vendedores crean los pedidos.


Inventario: Ubicaciones predeterminadas en transferencias

Al crear una transferencia interna o un ajuste de inventario, los campos de ubicación de origen y destino se establecen de forma predeterminada en las ubicaciones configuradas en la configuración del almacén. El personal del almacén que siempre trabaja dentro de la misma zona encontrará la ubicación correcta ya seleccionada cuando abra una nueva transferencia. Esto ahorra clics y reduce el riesgo de seleccionar la ubicación incorrecta bajo presión de tiempo.


Contabilidad: Diario Predeterminado en Entradas

Cuando un usuario crea una nueva factura de cliente o una factura de proveedor, Odoo predetermina el diario apropiado según el tipo de entrada y la configuración de la empresa. Un contable que abre una nueva factura de proveedor no tiene que seleccionar manualmente el diario de compras cada vez. El valor predeterminado se resuelve dinámicamente a partir de la configuración de la empresa, no de un valor codificado, lo que significa que se mantiene correcto incluso si los diarios se reconfiguran más tarde.


Proyecto: Etapa Predeterminada en Nuevas Tareas

Cuando se crea una nueva tarea dentro de un proyecto, comienza en la primera etapa de la configuración kanban de ese proyecto. Si la tarea se crea haciendo clic en un botón en un registro de proyecto específico, los valores predeterminados basados en el contexto también completan automáticamente el proyecto y, a veces, al responsable. Los equipos que utilizan Odoo para la gestión de proyectos se benefician de estos valores predeterminados porque mantienen las nuevas tareas en el lugar correcto desde el momento en que se crean, sin necesidad de configuración manual.

Creación o personalización de valores predeterminados


Hay tres enfoques principales para establecer valores predeterminados en Odoo, que van desde un clic sin código en Studio hasta un control total en Python en un módulo personalizado.


Usando Odoo Studio (Sin Código)

Odoo Studio proporciona una interfaz visual para establecer valores predeterminados en cualquier campo de tus formularios. Para establecer un valor predeterminado a través de Studio:

  • Abre la interfaz de Studio en el formulario que deseas modificar
  • Haz clic en el campo que deseas configurar
  • En el panel de propiedades del campo a la derecha, encuentra la entrada de Valor Predeterminado
  • Ingresa o selecciona el valor que deseas como valor predeterminado inicial
  • Guarda y sal de Studio

Studio almacena esta configuración como un ir.default en la base de datos. Se aplica a nivel de empresa a menos que un administrador especifique una restricción a nivel de usuario. Este enfoque funciona bien para valores predeterminados estáticos en campos de Selección, Booleanos, Char e Integer. Para campos Many2one, Studio te permite elegir un registro existente de un menú desplegable. Es uno de los usos más prácticos de crear campos en Odoo sin escribir ningún código.

Una cosa a tener en cuenta: cambiar el valor predeterminado a través de Studio después de que los usuarios ya hayan estado creando registros no actualiza esos registros existentes. El nuevo valor predeterminado solo se aplica a los registros creados después del cambio.


Uso de Python en Personalización Técnica

Para la personalización técnica de Odoo, los valores predeterminados se establecen directamente en la definición del campo dentro del modelo de Python. Esto da un control total sobre los valores estáticos, las lambdas dinámicas y los valores predeterminados basados en métodos. Es el enfoque preferido en cualquier escenario de desarrollo de Odoo donde el valor predeterminado dependa de información en tiempo de ejecución, como el usuario actual, la fecha de hoy o la configuración de la empresa.


Aquí hay un ejemplo que muestra varios tipos de valores predeterminados que podrías agregar a un módulo personalizado:


from odoo import fields, models

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

    # Valor predeterminado Booleano estático
    x_requires_review = fields.Boolean(
        string='Requiere Revisión',
        default=False,
    )

    # Valor predeterminado de Selección estático
    x_delivery_preference = fields.Selection(
        [('standard', 'Estándar'), ('express', 'Expreso')],
        string='Preferencia de Entrega',
        default='standard',
    )

    # Valor predeterminado dinámico usando un método
    def _default_note(self):
        return self.env['ir.config_parameter'].sudo().get_param(
            'sale.default_note', default=''
        )

    x_internal_note = fields.Text(
        string='Nota Interna',
        default=_default_note,
    )

Este patrón sigue la convención estándar de campos de Python de Odoo y funciona en todos los tipos de campos de Odoo. El valor predeterminado basado en un método es particularmente útil cuando la lógica es más compleja que una sola expresión lambda.


Uso de Registros ir.default Programáticamente

También puedes crear o actualizar registros ir.default a través de la API XML-RPC de Odoo o dentro de un archivo de datos de módulo. Esto es útil al enviar una configuración predeterminada como parte de la instalación de un módulo personalizado. El modelo ir.default acepta un nombre de modelo, un nombre de campo, un valor y opcionalmente una empresa o usuario para delimitar el valor predeterminado.


Este enfoque es menos común en el desarrollo diario, pero surge al construir módulos Odoo instalables que necesitan configurar valores predeterminados sensatos como parte de su rutina de configuración.

Mejores prácticas para valores predeterminados en Odoo


Establecer Valores Predeterminados en Campos Obligatorios

Si un campo es obligatorio, dale un valor predeterminado sensato siempre que sea posible. Esto reduce la fricción y previene errores de guardado cuando los usuarios intentan enviar un nuevo registro sin darse cuenta de que un campo es obligatorio. Combinar required=True con un valor predeterminado práctico es un buen patrón en el modelo de datos de Odoo.


Utiliza Lambdas para Valores Predeterminados de Fecha

Nunca codifiques una fecha como un valor predeterminado. Utiliza lambda self: fields.Date.today() para que el valor predeterminado sea siempre la fecha actual en el momento en que se crea el registro. Una fecha codificada sería incorrecta para cualquier registro creado después de que se escribió el código, lo que en la práctica significa que es incorrecta casi de inmediato.


Mantén la Lógica Predeterminada Ligera

Las funciones predeterminadas se ejecutan durante la creación del registro, lo que significa que se ejecutan cada vez que un usuario abre un nuevo formulario. Evita hacer consultas a la base de datos, llamar a APIs externas o realizar cálculos pesados dentro de los métodos predeterminados. Mantenlos rápidos y simples. Si necesitas algo más complejo, considera usar un onchange o un campo calculado activado por otro campo en su lugar.


Utiliza Valores Predeterminados de Contexto para Flujos de Navegación

Al construir acciones personalizadas o botones inteligentes que abren un nuevo formulario, pasa los valores de default_field_name a través del contexto de la acción en lugar de depender de valores predeterminados estáticos del modelo. Así es exactamente como funcionan los botones nativos de Odoo y mantiene tu personalización de Odoo alineada con las convenciones del marco.


Prueba los Valores Predeterminados con Múltiples Perfiles de Usuario

Los valores predeterminados dinámicos que hacen referencia a self.env.user o self.env.company se comportan de manera diferente dependiendo de quién haya iniciado sesión. Siempre prueba con al menos dos cuentas de usuario diferentes, y con diferentes configuraciones de empresa si estás ejecutando una configuración de múltiples empresas. Lo que funciona para un administrador puede producir resultados inesperados para un usuario estándar.

Errores comunes


Usar un Objeto Mutable como Predeterminado

Este es el error clásico de Python y también se aplica en el desarrollo de Odoo. Nunca escribas default=[] o default={} para un campo. Python comparte el mismo objeto de lista o diccionario entre todas las instancias, lo que provoca que los datos se filtren entre registros de maneras inesperadas. Utiliza un lambda en su lugar: default=lambda self: []. Esto crea un objeto nuevo cada vez que se inicializa un registro.


Los Predeterminados No Activan onchange

Establecer un valor predeterminado no activa los métodos onchange. Si tu formulario tiene un onchange en un campo que normalmente activa actualizaciones en otros campos, el valor predeterminado elude completamente esa reacción en cadena. Los usuarios verán el valor prellenado pero ninguno de los efectos posteriores que normalmente produciría onchange. Si necesitas que el onchange se ejecute en la inicialización, debes llamarlo explícitamente en una anulación personalizada de default_get o manejar la lógica de otra manera.


Conflictos de valores predeterminados de ir.default y definición de modelo

Si estableces un valor predeterminado tanto en Python como a través de Studio o un registro ir.default, Odoo los resuelve con un orden de prioridad. El registro ir.default tiene prioridad sobre el valor predeterminado a nivel de modelo en Python. Esta es una fuente común de confusión al depurar valores de campo inesperados, especialmente después de un cambio de configuración en Studio que anula silenciosamente algo que un desarrollador estableció en el código.


Asumir un valor predeterminado significa un valor requerido

Un campo con un valor predeterminado no es automáticamente requerido. Si el usuario borra el campo, se guardará vacío. No confíes solo en el valor predeterminado para hacer cumplir la integridad de los datos. Si siempre necesitas un valor en ese campo, combina el valor predeterminado con required=True.


Codificación rígida de IDs de registros de empresa o usuario

Un valor predeterminado como default=1 que hace referencia a un usuario o empresa por su ID de base de datos es frágil. Se romperá en cualquier entorno donde ese registro tenga un ID diferente, que es prácticamente cada base de datos de producción que no se configuró de manera idéntica al entorno de desarrollo. Siempre utiliza referencias dinámicas: lambda self: self.env.company.id o lambda self: self.env.ref('module.xml_id').id.

Conclusión


Los valores predeterminados son una característica pequeña pero poderosa en el modelo de datos de Odoo. Reducen la entrada manual de datos, guían a los usuarios hacia elecciones consistentes y facilitan el uso de formularios para todos en el equipo. Ya sea que los configures a través de Odoo Studio para un cambio rápido sin código o los definas en Python como parte de una personalización técnica, entender cómo funcionan los valores predeterminados te ayuda a construir mejores implementaciones de Odoo.


Los puntos clave a tener en cuenta: los valores predeterminados solo se ejecutan en el momento de la creación del registro, no de manera continua. No activan métodos onchange. Múltiples fuentes de valores predeterminados siguen un orden de prioridad definido. Y los objetos mutables como listas o diccionarios siempre deben estar envueltos en un lambda cuando se utilizan como valores predeterminados de campo.


Acertar con los valores predeterminados a menudo es la diferencia entre un formulario que se siente intuitivo y uno que crea fricción para los usuarios cada vez que necesitan crear un nuevo registro. Es una pequeña inversión que se paga todos los días.


En Dasolo, ayudamos a las empresas a implementar, personalizar y optimizar Odoo para adaptarse a sus flujos de trabajo específicos. Si necesitas ayuda configurando valores predeterminados de campo, construyendo campos personalizados o diseñando un modelo de datos de Odoo que realmente funcione para tu equipo, estaremos encantados de ayudar. Contáctanos y hablemos sobre tu implementación de Odoo.

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