Ir al contenido

Campo Date en Odoo: Guía Completa y Práctica

Guía definitiva sobre el campo Fecha en el modelo de datos de Odoo: desde cómo usarlo en tareas cotidianas hasta cómo personalizarlo técnicamente
6 de marzo de 2026 por
Campo Date en Odoo: Guía Completa y Práctica
Dasolo
| Sin comentarios aún

Introducción


Si alguna vez has abierto una orden de venta, una tarea de proyecto o una orden de fabricación en Odoo, ya has interactuado con un campo Fecha: plazos de entrega, vencimientos de facturas o inicio de contratos suelen registrarse con este tipo de campo.

Para la mayoría de usuarios el campo Fecha parece trivial: haces clic, se abre un calendario y eliges un día. Sin embargo, bajo la superficie hay decisiones de diseño y comportamiento (frente a campos con marca temporal) que influyen en informes, automatizaciones y cómo se comportan los datos entre distintos husos horarios. Comprender esas diferencias evita errores y simplifica las integraciones.

Esta guía explica lo esencial sobre el campo Fecha en Odoo: qué almacena, cómo se gestiona en el ORM y la interfaz, ejemplos prácticos de negocio y cómo crearlo o configurarlo correctamente.

¿Qué es el campo Fecha en Odoo?


En el ORM de Odoo, el tipo fields.Date guarda únicamente una fecha de calendario: año, mes y día. No incorpora hora, minutos ni segundos; es la representación pura del día en el calendario.

A nivel de base de datos (PostgreSQL), se corresponde con una columna de tipo DATE, distinta de los campos temporales que usan TIMESTAMP y contienen información de tiempo completa.

En la interfaz, el campo Fecha se muestra como un campo de texto con un selector de calendario. Los usuarios pueden escribir la fecha o seleccionarla en el picker; en las vistas de lista se muestra formateada según la configuración regional.

Ejemplo de definición típica en un módulo personalizado:

from odoo import fields, models

class ProjectTask(models.Model):
    _inherit = 'project.task'

    x_deadline_confirmed = fields.Date(
        string='Confirmed Deadline',
        help='The officially confirmed deadline agreed with the customer.',
    )

Si creas el campo desde Odoo Studio aparecerá como Date y recibirá automáticamente el prefijo x_studio_. Si lo defines en Python o con la API, tú decides el nombre técnico del campo.

Cómo funciona el campo Fecha


Fecha frente a FechaHora: qué cambia realmente

Lo esencial a entender es qué no incluye el campo Fecha: no hay componente horario ni conversión entre husos. Solo representa el día del calendario, sin ajustes de horas.

Por el contrario, un campo DateTime almacena un instante completo normalmente en UTC y Odoo lo convierte al huso horario del usuario al mostrarlo. Es esa conversión la que suele provocar errores tipo “la fecha se movió un día”, algo que rara vez ocurre con campos Fecha puros.

Con un campo Fecha, el valor que guardas es el mismo que ven todos los usuarios: 2026-03-15 será siempre 2026-03-15, independientemente del país o zona horaria.

Atributos clave del campo

Estos son los parámetros más útiles que puedes configurar en un fields.Date dentro del framework de Odoo:

  • required: obliga a completar el campo a nivel de interfaz y modelo.
  • default: asigna un valor por defecto; por ejemplo, fields.Date.today para la fecha actual.
  • index: crea un índice en la base de datos para acelerar búsquedas y filtros.
  • compute: enlaza una función Python que calcula el valor de forma dinámica.
  • store: con compute, decide si el resultado se guarda en la base de datos.
  • readonly: impide la edición manual en la vista.
  • copy: controla si la fecha se duplica al duplicar registros (por defecto es True).

Cómo se muestra en las vistas

En formularios aparece como campo con popup de calendario; en listas, como texto con el formato local. Las vistas de búsqueda incorporan filtros de rango estándar («esta semana», «este mes», etc.) y operadores como antes/después/en fecha.

El formato visual sigue la lengua/locale del usuario: un usuario en España verá DD/MM/YYYY mientras que otro en EE. UU. verá MM/DD/YYYY. Internamente, la fecha siempre se guarda en formato ISO (YYYY-MM-DD).

Interacción con el ORM de Odoo

Al leer un campo Date desde código, el ORM devuelve un objeto Python datetime.date o False si está vacío. Al escribir, puedes pasar un datetime.date o una cadena en formato 'YYYY-MM-DD'. Por API XML-RPC las fechas viajan como cadenas.

Trabajar con campos Fecha no requiere transformaciones complejas: Odoo y la base de datos se encargan del formateo y almacenamiento, lo que facilita su uso en desarrollos cotidianos.

Casos de uso en la empresa


Dónde se usan las fechas en procesos reales — cinco ejemplos prácticos

CRM: fechas de inicio y fin de contratos

En equipos comerciales se registran habitualmente fechas de inicio y fin para contratos o acuerdos. Un campo Fecha en el módulo CRM o en un modelo de contrato facilita el seguimiento de vigencias y renovaciones.

Combinado con acciones automáticas, esos campos permiten enviar recordatorios o cambiar estados antes de la expiración, reduciendo la tasa de renovaciones perdidas por falta de seguimiento manual.

Ventas: fecha solicitada por el cliente

Cuando un cliente pide una fecha concreta de entrega, suele añadirse un campo como "Fecha solicitada por el cliente" en pedidos de venta para que operaciones coordinen con un objetivo claro.

Usar Fecha en lugar de FechaHora simplifica la coordinación logística y evita discrepancias por zonas horarias: el almacén y ventas ven la misma fecha sin conversiones inesperadas.

Inventario: fechas de caducidad en lotes

En alimentación, farmacias o química, los lotes necesitan fechas de caducidad o consumo preferente. La gestión de lotes en Odoo usa campos Fecha para registrar esos datos sobre stock.lot.

Esas fechas alimentan estrategias como FEFO (First Expired First Out) y alertas automáticas para stocks cercanos a caducar, ayudando a cumplir normativas y evitar pérdidas de calidad.

Contabilidad: vencimientos de facturas

Los vencimientos de factura son campos Fecha en Odoo y determinan cuándo se envían avisos de pago, cómo se identifican facturas vencidas y cómo se calculan los ageing reports.

Tener los vencimientos correctos es crítico: una fecha errónea puede romper el seguimiento de caja y las automatizaciones de cobro sin que nadie lo detecte de inmediato.

RR. HH.: fechas de incorporación, contratos y certificaciones

Los equipos de Recursos Humanos dependen de campos Fecha para fechas de alta, finalización de periodo de prueba, inicio y fin de contrato o caducidad de certificaciones. Estos valores disparan correos, alertas y reglas de nómina.

Sin una disciplina en el manejo de fechas en los registros de empleado, muchas automatizaciones críticas dejan de funcionar o generan errores operativos.

Cómo crear o personalizar un campo Fecha


Hay tres vías principales para añadir un campo Fecha a un modelo en Odoo, según tus necesidades técnicas y modo de despliegue.

Con Odoo Studio (sin código)

Odoo Studio es la forma más rápida para usuarios y consultores que quieran añadir seguimiento de fechas sin tocar código. Pasos habituales:

  1. Abre Odoo Studio desde el menú principal.
  2. Ve al formulario donde quieres añadir el campo.
  3. Arrastra un campo Date desde la barra lateral al formulario.
  4. Configura la etiqueta, si es obligatorio y un valor por defecto si procede.
  5. Guarda y cierra Studio.

Studio crea el campo con prefijo x_studio_ y lo añade a la vista sin necesidad de migraciones manuales en la base de datos.

Con Python en un módulo personalizado

Para desarrollos controlados por versión y despliegues reproducibles, define el campo en los modelos Python. Es la opción adecuada para personalizaciones que se despliegan en varios entornos.

from odoo import fields, models

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

    x_customer_requested_date = fields.Date(
        string='Customer Requested Date',
        index=True,
        copy=False,
        help='Delivery date requested by the customer at time of order.',
    )

Tras definirlo en el modelo, añade la referencia en la vista XML correspondiente para que sea visible en la interfaz; Odoo aplicará la alteración de la base de datos al instalar o actualizar el módulo.

Con la API XML-RPC

Si tu flujo implica crear campos por automatización o desde scripts remotos, puedes crear campos Fecha mediante la API XML-RPC:

field_id = models.execute_kw(
    ODOO_DB, uid, ODOO_API_KEY,
    'ir.model.fields', 'create',
    [{
        'name': 'x_customer_requested_date',
        'field_description': 'Customer Requested Date',
        'model_id': model_id,
        'ttype': 'date',
        'state': 'manual',
    }]
)

El ttype para un campo Fecha es 'date' (mientras que para FechaHora sería 'datetime'). Usar 'manual' en state indica que el campo fue creado manualmente y no por la instalación de un módulo, útil en scripts de configuración remota.

Buenas prácticas


1. Usa Date cuando la hora no importe

Si solamente necesitas el día (plazos, caducidades, cumpleaños), elige fields.Date. Usar DateTime en estos casos introduce complejidad por husos horarios sin ventajas reales y puede generar errores de desplazamiento de un día.

2. Define un valor por defecto útil

Para campos como "Fecha estimada de entrega" o "Fecha de seguimiento", fijar como defecto hoy o hoy más X días ofrece una experiencia más fluida. Emplea default=fields.Date.today (sin paréntesis) para que el valor se calcule al crear el registro.

3. Indexa las fechas que se usan en informes y filtros

Si los usuarios filtran frecuentemente por una fecha (facturas vencidas, renovaciones próximas, certificaciones a punto de expirar), añade index=True. En volúmenes grandes esto mejora considerablemente el rendimiento de consultas.

4. Usa copy=False para fechas que no deben duplicarse

Fechas como "Inicio de contrato" o "Caducidad" no deberían copiarse al duplicar un registro. copy=False obliga a que el usuario establezca la fecha manualmente en el nuevo registro y evita errores silenciosos.

5. Añade validaciones cuando dos fechas forman un intervalo

Si tienes pares tipo "Fecha inicio" y "Fecha fin", incluye una restricción con @api.constrains que impida que la fecha fin sea anterior a la inicio. Esto evita problemas posteriores en cálculos y reportes.

Errores comunes


Confundir campos Date y DateTime

Este es el error más habitual: usar DateTime cuando basta con Date. DateTime guarda instantes en UTC y su presentación varía según el huso del usuario; Date guarda el día y no convierte nada. Elegir el tipo equivocado provoca inconsistencias entre usuarios en distintos husos horarios.

Siempre opta por el tipo más simple que cumpla la necesidad de negocio.

No considerar el huso del servidor en acciones programadas

Al crear acciones programadas o informes que comparen con "hoy", recuerda que fields.Date.today() devuelve la fecha del servidor en UTC. En equipos globales eso puede dar discrepancias de un día. Prueba las automatizaciones desde varias zonas horarias si tu equipo está distribuido.

No validar intervalos de fecha

Es frecuente encontrar modelos con "Fecha inicio" y "Fecha fin" sin validación: eso permite datos inválidos que rompen cálculos de duración y filtros. Añade siempre una comprobación con @api.constrains cuando las fechas formen un rango lógico.

Olvidar indexar fechas usadas en filtros

Campos Fecha empleados en consultas tipo "fecha < hoy" para vistas de vencidos o próximos deben estar indexados. Sin índice, cada consulta recorre toda la tabla; en tablas grandes esto ralentiza operaciones diarias.

Almacenar fechas como texto

Guardar fechas en campos Char para mantener un formato personalizado rompe ordenación, filtros, aritmética y reportes. Usa siempre fields.Date: la plataforma y la base de datos gestionan formato y localización correctamente.

Preguntas frecuentes


¿En qué se diferencia un campo Date de un DateTime en Odoo?

Un campo Date almacena solo la fecha (año, mes, día). Un DateTime guarda un instante completo (hora, minutos, segundos), se almacena típicamente en UTC y Odoo lo muestra según el huso horario del usuario. Usa Date cuando la hora del día no importe y DateTime cuando necesites registrar el momento exacto.

¿Cómo pongo la fecha de hoy como valor por defecto en un campo Fecha?

En Python usa default=fields.Date.today (sin paréntesis). Es una función que Odoo evalúa al crear el registro. En Odoo Studio selecciona "Today" en las propiedades del campo.

¿Puedo calcular un campo Fecha a partir de otros campos?

Sí. Define el campo con compute='_compute_my_date' y crea el método correspondiente con @api.depends() listando los disparadores. Haz los cálculos con datetime.date y timedelta. Si quieres usarlo en búsquedas o agrupaciones, añade store=True para guardar el resultado en la BD.

¿Cómo filtro por un rango de fechas en un dominio de Odoo?

Usa operadores de comparación estándar. Por ejemplo, para obtener registros con fecha en marzo de 2026:

[
    ('x_date_field', '>=', '2026-03-01'),
    ('x_date_field', '<=', '2026-03-31')
]

Las fechas en dominios deben ir en formato ISO: YYYY-MM-DD.

¿Puedo hacer un campo Fecha obligatorio solo en ciertas condiciones?

La interfaz permite mostrar campos como obligatorios condicionalmente usando attrs en la vista, pero la validación backend requiere código: una restricción con @api.constrains. Odoo Studio ofrece reglas condicionales útiles para muchos casos sin programar.

Conclusión


El campo Fecha es uno de los tipos más prácticos del framework. Es sencillo, fiable y, bien usado, impulsa automatizaciones importantes como recordatorios, comprobaciones de vencimiento y reportes temporales.

Puntos clave a recordar: usa Date cuando solo necesites el día, aprovecha defaults e índices para mejorar la experiencia y el rendimiento, y valida pares de fechas que formen intervalos.

Diseñar modelos de datos limpios en Odoo empieza por decisiones pequeñas como elegir el tipo de campo correcto. Acertar desde el principio es una señal de una implantación bien hecha; el campo Fecha es una pieza básica de ese diseño.

En Dasolo acompañamos a empresas a implementar, personalizar y optimizar Odoo en todos los departamentos. Ya sea definiendo un modelo de datos claro, añadiendo campos y flujos personalizados o desarrollando módulos completos, podemos ayudarte a materializar tu proyecto. Contacta con nosotros y hablemos sobre tu proyecto Odoo.

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