Passa al contenuto

Campo Data in Odoo: Guida Completa per Configurare e Usare

Guida completa al campo Data nel modello dati di Odoo: come usarlo, quando conviene scegliere una data rispetto a una data/ora e quali personalizzazioni tecniche puoi applicare per adattarlo ai flussi aziendali.
6 marzo 2026 di
Campo Data in Odoo: Guida Completa per Configurare e Usare
Dasolo
| Ancora nessun commento

Introduzione


Se hai mai compilato una distinta d'ordine, aggiornato un'attività di progetto o impostato una scadenza in produzione dentro Odoo, hai già interagito con un campo Data. Scadenze di progetto, date di consegna, termini di pagamento e inizio contratto: la maggior parte delle informazioni dipendenti dal calendario in Odoo viene memorizzata con questo tipo di campo.

Per chi lavora quotidianamente, il campo Data è naturale: clicchi, appare un calendario e scegli il giorno. Tuttavia sotto la superficie ci sono regole precise sul formato, sul comportamento nelle operazioni e sulle implicazioni per i fusi orari. Capire come il campo Data si comporta nel modello dati di Odoo e in che cosa differisce dal campo DateTime ti aiuta a costruire flussi più affidabili e a evitare sorprese legate alla gestione del tempo.

Questa guida ti porta attraverso tutto quello che serve sapere sul campo Data in Odoo: cosa memorizza, come si usa correttamente nei processi aziendali e quali scelte progettuali adottare per evitare problemi.

Il campo Data in Odoo spiegato in breve


Nel framework di Odoo, il campo fields.Date è pensato per conservare soltanto una data di calendario — anno, mese e giorno — senza alcun riferimento a ore, minuti o secondi. Il valore è esclusivamente una data pura.

Nel database PostgreSQL che sta sotto Odoo, un campo Data corrisponde a una colonna di tipo DATE. Questo è diverso dal campo DateTime che mappa su TIMESTAMP e contiene invece un momento preciso nel tempo.

Nell'interfaccia utente, il campo Data si mostra come un input testuale con un selettore di calendario: l'utente può digitare la data o selezionarla dal popup. Nelle viste elenco viene mostrato come testo formattato seguendo le impostazioni di lingua e localizzazione dell'utente.

Ecco un esempio di come si definisce un campo Data in un modulo Python personalizzato:

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.',
    )

Se aggiungi il campo tramite Odoo Studio lo vedrai etichettato come Date e Odoo aggiungerà automaticamente il prefisso x_studio_. Se invece lo dichiari via codice Python o con l'API XML-RPC, scegli tu il nome tecnico del campo.

Come funziona il campo


Data vs DateTime: cosa cambia davvero

La caratteristica fondamentale del campo Data è ciò che non contiene: nessuna informazione sull'ora. Non ci sono conversioni di fuso orario, né spostamenti legati all'orario; solo il giorno sul calendario.

Il campo DateTime, al contrario, conserva un timestamp completo che viene salvato in UTC e poi convertito nella fascia oraria dell'utente al momento della visualizzazione. È proprio questa conversione a generare i famosi problemi del tipo "la data è cambiata di un giorno". Quasi sempre quei casi dipendono dall'uso inappropriato di DateTime.

Con il campo Date il valore salvato è quello che l'utente vede. Una data inserita come 2026-03-15 resta 2026-03-15 per chiunque acceda al sistema, ovunque si trovi.

Attributi principali del campo

Gli attributi più utili da conoscere quando configuri un campo Data in Odoo sono i seguenti:

  • required: impone che il campo sia obbligatorio a livello di interfaccia e di modello.
  • default: permette di impostare un valore predefinito. Ad esempio fields.Date.today imposta automaticamente la data corrente quando si crea il record.
  • index: crea un indice sul database per velocizzare ricerche e filtri basati su quella data.
  • compute: collega una funzione Python che calcola il valore in modo dinamico.
  • store: insieme a compute, salva il valore calcolato nel database per poterlo filtrare e raggruppare.
  • readonly: rende il campo non modificabile dall'interfaccia.
  • copy: determina se il valore viene copiato quando si duplica un record. Di default è True.

Come viene visualizzato nelle viste

Nelle viste form il campo Data appare con il selettore calendario; nelle viste elenco come testo formattato; nelle ricerche supporta nativamente filtri per intervalli temporali come "questa settimana", "questo mese" e operatori di confronto come prima, dopo o esattamente in una data.

Il formato visivo segue le impostazioni di lingua dell'utente: un utente italiano vedrà GG/MM/AAAA mentre uno statunitense MM/GG/AAAA. Internamente però il valore resta sempre in formato ISO (YYYY-MM-DD).

Interazione col ORM di Odoo

Quando leggi un campo Date dal codice, l'ORM restituisce un oggetto Python datetime.date oppure False se il campo è vuoto. Quando scrivi, puoi fornire un datetime.date o una stringa in formato "YYYY-MM-DD". Nelle chiamate via XML-RPC le date transitano come stringhe.

Non ci sono trasformazioni complicate da gestire lato applicazione: Odoo e il database si occupano di memorizzazione e formattazione, il che rende il campo Data semplice e affidabile per la maggior parte degli usi.

Esempi pratici per l'azienda


Dove il campo Data è usato concretamente in azienda: cinque esempi

CRM: date di inizio e fine contratto

Nelle pipeline commerciali è normale registrare quando un contratto inizia e quando scade. Un campo Data collegato al lead o al contratto permette di monitorare l'attivazione e la scadenza degli accordi.

Collegando quei campi ad azioni automatiche puoi inviare promemoria via email o cambiare lo stato quando la scadenza si avvicina, evitando rinnovi persi e riducendo il lavoro manuale del team commerciale.

Vendite: data di consegna richiesta dal cliente

Spesso il cliente indica un giorno preciso per la consegna. Aggiungere un campo "Data richiesta" sugli ordini di vendita fornisce al reparto operativo una data chiara attorno a cui pianificare la logistica.

Se usi un campo Data invece di un DateTime mantieni le cose semplici e eviti problemi di fuso orario tra vendite e magazzino: tutti vedono lo stesso giorno senza conversioni indesiderate.

Magazzino: date di scadenza sui lotti

Nelle industrie alimentari, farmaceutiche o chimiche è fondamentale tracciare la data di scadenza dei lotti. La gestione dei lotti in Odoo sfrutta campi Data per memorizzare scadenze e termini di conservazione.

Queste informazioni alimentano strategie di prelievo FEFO (First Expired First Out) e allarmi automatici quando la merce si avvicina alla scadenza, proteggendo qualità e conformità normativa.

Contabilità: scadenze delle fatture

Le scadenze delle fatture sono campi Data. Determinano l'invio dei solleciti, il riconoscimento delle fatture scadute e il calcolo dei report di scadenza clienti/fornitori.

Impostare correttamente queste date è cruciale: un errore qui compromette il controllo dei flussi di cassa e le attività di sollecito automatico.

Risorse umane: assunzioni, contratti e certificazioni

Il reparto HR si affida ai campi Data per data di assunzione, fine periodo di prova, durata del contratto e scadenze di certificazioni. Queste date attivano email automatiche, alert e regole di calcolo stipendio.

Un modulo HR ben progettato richiede dati Data accurati: molte automazioni critiche nascono proprio dal corretto inserimento di queste date a livello anagrafico.

Come aggiungere o personalizzare un campo Data


Hai tre strade principali per inserire un campo Data in un modello Odoo, a seconda delle competenze e del processo di distribuzione.

Con Odoo Studio (senza codice)

Odoo Studio è la via più veloce per aggiungere un campo Data senza scrivere codice: ideale per consulenti e utenti business che vogliono estendere rapidamente un form standard.

  1. Apri Odoo Studio dal menu principale.
  2. Vai al form dove vuoi inserire il campo.
  3. Trascina un campo Date dalla barra laterale sul form.
  4. Imposta l'etichetta, se renderlo obbligatorio e eventuale valore predefinito.
  5. Salva e chiudi Studio.

Studio crea il campo con prefisso x_studio_ e lo aggiunge subito alla vista, senza necessità di migrazione manuale del database.

Con Python in un modulo personalizzato

Per sviluppatori che versionano e distribuiscono personalizzazioni, i campi Data si dichiarano nei file modello Python: soluzione consigliata per implementazioni ripetibili e controllate.

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.',
    )

Dopo aver aggiunto il campo nel modello, ricordati di inserirlo anche nella vista XML corrispondente: Odoo provvederà a creare la colonna nel database quando installi o aggiorni il modulo.

Con l'API XML-RPC

Se gestisci la configurazione in modo programmatico (pipeline di deployment, script remoti), puoi creare campi Data via 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',
    }]
)

Il valore ttype per un campo Data è 'date' (per DateTime sarebbe 'datetime'). Impostare 'manual' nello stato segnala che il campo è creato a runtime e non proviene dall'installazione di un modulo.

Buone pratiche


1. Usa Date, non DateTime, quando l'ora non conta

Se ti interessa solo il giorno — una scadenza, un compleanno, la fine di un contratto — scegli fields.Date. Usare DateTime dove basta una data introduce complessità di fusi orari senza benefici e può generare bug di spostamento di un giorno.

2. Imposta un default sensato quando utile

Per campi come "Data consegna prevista" o "Data di follow-up" un default a oggi o a oggi + N giorni dà all'utente un punto di partenza pratico. In Python usa default=fields.Date.today (senza parentesi) perché viene valutato al momento della creazione del record.

3. Indicizza i campi Date usati per filtri e report

Se gli utenti filtrano spesso per una data (fatture scadute, rinnovi in scadenza, certificati in scadenza) aggiungi index=True. Su dataset grandi questo migliora molto le performance delle query con costi iniziali trascurabili.

4. Usa copy=False per date che non devono essere duplicate

Campi come "Data inizio contratto" o "Data di scadenza" non dovrebbero essere copiati quando si duplica un record. copy=False impedisce di portare inconsapevolmente date obsolete su nuovi documenti.

5. Aggiungi vincoli quando due date definiscono un intervallo

Quando esistono campi "Data inizio" e "Data fine" implementa una validazione con @api.constrains per assicurarti che la fine non preceda l'inizio: è una protezione semplice che evita problemi di consistenza difficili da correggere dopo.

Errori comuni da evitare


Confusione tra Date e DateTime

Questo è l'errore più comune: impiegare DateTime dove basta una data. DateTime salva in UTC e converte alla visualizzazione, mentre Date non converte nulla. Usare DateTime inutilmente può far sì che una data inserita alle 00:00 in un fuso appaia al giorno precedente per un altro utente.

Regola pratica: scegli sempre il tipo più semplice che soddisfa la necessità di business.

Non considerare il fuso orario del server nelle azioni schedulate

Attenzione: fields.Date.today() restituisce la data del server in UTC. Per la maggior parte dei report va bene, ma per automazioni critiche distribuite su più fusi orari testa sempre le regole da postazioni con fusi diversi per evitare discrepanze di un giorno.

Mancanza di vincoli sulle coppie di date

Spesso si trovano modelli con "Data inizio" e "Data fine" senza alcun controllo che la seconda sia successiva alla prima. Questo lascia entrare dati errati che rovinano calcoli di durata e report. Aggiungi sempre una check rule con @api.constrains quando le date formano un intervallo.

Dimenticare di indicizzare i campi Date usati nei filtri

Campi usati per controlli "scaduto" o "prossime scadenze" vengono spesso interrogati con condizioni come "data < oggi". Senza indice ogni query forza una scansione completa della tabella: su fatture, attività o movimenti di magazzino con molti record questo degrada visibilmente le prestazioni.

Conservare date in campi Char

Alcuni team mettono le date in campi testo per mantenere un formato personalizzato o evitare il calendario. Questo compromette ordinamento, filtri, calcoli temporali e report. Usa sempre fields.Date: Odoo e il database gestiscono formattazione e localizzazione in modo appropriato.

Domande frequenti


Qual è la differenza tra Date e DateTime in Odoo?

Il campo Date memorizza solo anno, mese e giorno senza ora. Il campo DateTime memorizza un timestamp completo, salvato in UTC e convertito nella fascia oraria dell'utente alla visualizzazione. Scegli Date quando l'ora non è rilevante; scegli DateTime quando devi sapere esattamente quando è avvenuto un evento.

Come imposto la data odierna come valore predefinito per un campo Date?

In Python usa default=fields.Date.today (senza parentesi) così il valore viene valutato quando si crea il record. In Odoo Studio seleziona "Today" nelle proprietà del campo per ottenere lo stesso comportamento.

Posso calcolare un campo Date in base ad altri campi?

Sì. Definisci il campo con compute='_compute_my_date' e crea un metodo con @api.depends() elencando i campi che ne causano la ricomputazione. Usa datetime.date e timedelta per le operazioni sulle date e aggiungi store=True se vuoi che il risultato venga memorizzato per filtri e report.

Come filtro i record per un intervallo di date in un dominio Odoo?

Usa gli operatori di confronto standard nel dominio. Per esempio, per trovare record con una data che cade nel marzo 2026:

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

Le stringhe di data nei domini devono essere sempre in formato ISO: YYYY-MM-DD.

Posso rendere obbligatorio un campo Date solo in certe condizioni?

La logica visuale può essere gestita con attrs in XML per mostrare il campo come richiesto in determinate condizioni, ma la validazione di backend richiede codice Python: implementa una constraint con @api.constrains per imporre la condizione. Per casi semplici Odoo Studio offre regole condizionali che spesso bastano senza programmare.

Conclusione


Il campo Data è uno dei più pratici nel framework Odoo: semplice da capire, facile da usare e al tempo stesso capace di supportare logiche aziendali importanti come promemoria, controlli di scadenza e reportistica temporale.

Punti chiave da ricordare: scegli Date quando basta la data del calendario, sfrutta default e indici per migliorare usabilità e prestazioni, e aggiungi vincoli quando due campi Data definiscono un intervallo.

Un buon modello dati in Odoo si costruisce partendo da scelte apparentemente piccole come il tipo di campo. Prendere la decisione giusta fin dall'inizio semplifica l'implementazione e riduce i costi di manutenzione: il campo Data è un componente fondamentale di questo approccio.

Noi di Dasolo supportiamo le aziende nell'implementazione, personalizzazione e ottimizzazione di Odoo in tutte le aree aziendali. Che tu abbia bisogno di definire un modello dati pulito, aggiungere campi e workflow personalizzati o sviluppare un modulo completo, possiamo affiancarti durante tutto il progetto. Contattaci Parliamo del tuo progetto Odoo.

Campo Data in Odoo: Guida Completa per Configurare e Usare
Dasolo 6 marzo 2026
Condividi articolo
Accedi per lasciare un commento