Passa al contenuto

Campo Data in Odoo: Guida Completa

Tutto ciò che devi sapere sul campo Data nel modello di dati Odoo, dall'uso di base alla personalizzazione tecnica
6 marzo 2026 di
Campo Data in Odoo: Guida Completa
Dasolo
| Ancora nessun commento

Introduzione


Se hai mai aperto un ordine di vendita, un'attività di progetto o un ordine di produzione in Odoo, hai già utilizzato un campo Data. Scadenze, date di consegna, date di scadenza delle fatture, date di inizio dei contratti - la maggior parte dei dati sensibili al tempo in Odoo è memorizzata utilizzando questo tipo di campo.

Per gli utenti aziendali, i campi Data sono intuitivi: clicchi, appare un calendario, scegli una data. Ma c'è di più sotto il cofano. Comprendere come funziona il campo Data nel modello di dati di Odoo, come si differenzia dai campi DataOra e come crearlo o personalizzarlo ti aiuterà a costruire flussi di lavoro più accurati ed evitare il tipo di sorprese legate ai fusi orari che intralciano molte implementazioni di Odoo.

Questa guida copre tutto ciò che devi sapere sul campo Data in Odoo, da cosa memorizza a come utilizzarlo efficacemente nei tuoi processi aziendali.

Cos'è il campo Data in Odoo


Nell'ORM di Odoo, il tipo fields.Date è progettato per memorizzare date del calendario senza componente temporale. Una data come "2026-03-06" viene memorizzata esattamente così com'è, senza ore, minuti o secondi allegati.

In PostgreSQL, il database su cui gira Odoo, un campo Data si mappa al tipo di colonna DATE. Questo è distinto dal campo DateTime, che si mappa a TIMESTAMP e include un timestamp completo fino al secondo.

Nell'interfaccia utente, un campo Data viene visualizzato come un input di testo con un selettore di calendario. Gli utenti possono digitare direttamente una data o fare clic sull'icona del calendario per selezionarne una. Nelle viste elenco, appare come testo formattato allineato alla locale dell'utente.

Ecco come appare una definizione di 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='Scadenza Confermata',
        help='La scadenza ufficialmente confermata concordata con il cliente.',
    )

In Odoo Studio, questo campo è semplicemente etichettato Data. Quando viene creato tramite Studio, riceve automaticamente un prefisso x_studio_. Quando viene creato tramite codice Python o l'API XML-RPC, scegli tu stesso il nome tecnico.

Come funziona il campo


Data vs. DateTime: cosa cambia realmente

La cosa più importante da capire riguardo al campo Data è cosa non include: il tempo. Non ci sono ore, nessuna conversione di fuso orario, nulla oltre la data del calendario stessa.

Il campo DateTime, al contrario, memorizza un timestamp completo ed è salvato in UTC nel database. Odoo poi lo converte nel fuso orario locale dell'utente in visualizzazione. Questa è la fonte di molti confusi bug "la mia data è cambiata di un giorno" che i team incontrano. Questi sono quasi sempre problemi di DateTime, non problemi del campo Data.

Quando utilizzi un campo Data, ciò che memorizzi è esattamente ciò che gli utenti vedono. Un valore di 2026-03-15 è 2026-03-15 per ogni utente, indipendentemente da dove si trovino nel mondo.

Attributi Chiave del Campo

Ecco le proprietà più importanti che puoi configurare su un campo Data nel framework Odoo:

  • required: Rende il campo obbligatorio sia a livello di interfaccia che di modello.
  • default: Imposta un valore predefinito automatico. Ad esempio, fields.Date.today predefinisce la data odierna nei nuovi record.
  • index: Crea un indice nel database per una filtrazione e una ricerca più veloci su quel campo.
  • compute: Collega un metodo Python che calcola il valore in modo dinamico.
  • store: Quando combinato con compute, persiste il valore calcolato nel database.
  • readonly: Impedisce agli utenti di modificare il campo direttamente nell'interfaccia.
  • copy: Controlla se il valore viene trasferito quando si duplica un record. Predefinito è True.

Come appare nelle viste

Nelle viste modulo, un campo Data viene visualizzato come un input di testo con un popup di calendario. Nelle viste elenco, viene mostrato come testo formattato. Nelle viste di ricerca, supporta filtri di intervallo di date out of the box: "questa settimana", "questo mese", "questo trimestre", così come operatori di confronto esatti come prima, dopo e in una data specifica.

Il formato di visualizzazione segue le impostazioni linguistiche dell'utente in Odoo. Un utente americano vede MM/DD/YYYY mentre un utente europeo vede DD/MM/YYYY. Il valore sottostante memorizzato è sempre in formato ISO (YYYY-MM-DD), indipendentemente da come appare sullo schermo.

Interazione con l'ORM di Odoo

Quando si legge un campo Data nel codice, l'ORM di Odoo restituisce un oggetto Python datetime.date, o False se il campo è vuoto. Quando si scrive tramite l'ORM, è possibile passare sia un oggetto datetime.date che una stringa nel formato "YYYY-MM-DD". Tramite l'API XML-RPC, le date vengono sempre passate e ricevute come stringhe.

Non ci sono trasformazioni complesse coinvolte quando si lavora con i campi Data nel modello dati di Odoo. Il framework gestisce automaticamente la formattazione e la memorizzazione, il che è parte di ciò che rende questo tipo di campo così pratico per l'uso quotidiano nello sviluppo di Odoo.

Casi d'uso aziendali


Il campo Data appare in quasi ogni parte di un'implementazione di Odoo. Ecco cinque esempi pratici da flussi di lavoro aziendali reali.

CRM: Date di Inizio e Fine del Contratto

Nei team di vendita che utilizzano Odoo CRM, i contratti hanno spesso date di inizio e fine definite. Un campo Data nel lead o in un modello di contratto personalizzato rende facile tenere traccia di quando gli affari si attivano e quando scadono.

Combinato con azioni automatizzate, è possibile attivare promemoria via email o cambiamenti di stato quando un contratto si avvicina alla sua data di scadenza, senza alcun follow-up manuale da parte del team. Questo tipo di automazione è semplice da configurare e salva molte scadenze mancate nel tempo.

Vendite: Date di Consegna Richieste

I clienti richiedono frequentemente una data di consegna specifica quando effettuano ordini. Molte aziende aggiungono un campo Data "Data Richiesta dal Cliente" sugli ordini di vendita per fornire al team operativo una data obiettivo chiara su cui pianificare.

Utilizzare un campo Data piuttosto che DateTime mantiene i dati semplici ed evita confusione sui fusi orari durante il coordinamento del magazzino. Il team di magazzino vede la stessa data inserita dal team di vendita, senza rischio di problemi di conversione.

Inventario: Date di Scadenza sui Lotti

Nelle industrie alimentari, farmaceutiche e chimiche, i lotti di prodotto devono avere le date di scadenza tracciate a livello di magazzino. La gestione dei lotti di Odoo utilizza campi Data per memorizzare le date di scadenza e di scadenza ottimale su stock.lot.

Questi guidano strategie di picking FEFO (First Expired First Out) e avvisi automatici quando le scorte si avvicinano alla scadenza, proteggendo sia la conformità normativa che la qualità del prodotto senza richiedere controlli manuali.

Contabilità: Scadenze delle Fatture

Le scadenze delle fatture in Odoo sono campi Data. Determinano quando vengono inviati i promemoria di pagamento automatici, come vengono identificate le fatture scadute e come vengono calcolati i report delle passività e delle attività scadute.

Avere queste date corrette è uno degli usi operativamente più importanti del campo Data nell'intero modello di dati di Odoo. Una data di scadenza errata interrompe silenziosamente il monitoraggio del flusso di cassa e l'automazione del follow-up.

HR: Date di Assunzione, Contratto e Certificazione

I team HR si affidano pesantemente ai campi Data per le date di assunzione, le date di fine periodo di prova, le date di inizio e fine contratto e le date di scadenza delle certificazioni. Questi valori alimentano email automatiche, avvisi e regole di calcolo della busta paga.

Un modulo HR ben progettato in Odoo è impossibile senza dati puliti e accurati dei campi Data in tutti i record dei dipendenti. Queste date sono spesso i trigger per alcune delle automazioni più critiche per il business in un'installazione Odoo.

Creare o Personalizzare il Campo Data


Ci sono tre modi principali per aggiungere un campo Data a un modello Odoo, a seconda della tua configurazione tecnica e dell'approccio di distribuzione.

Utilizzando Odoo Studio (Nessun Codice)

Odoo Studio è il modo più semplice per aggiungere un campo Data senza scrivere alcun codice. Questo è l'approccio raccomandato per gli utenti aziendali e i consulenti che vogliono aggiungere il tracciamento delle date ai moduli standard di Odoo rapidamente:

  1. Apri Odoo Studio dal menu principale.
  2. Naviga al modulo in cui desideri il campo.
  3. Trascina un campo Data dalla barra laterale nel modulo.
  4. Imposta l'etichetta, lo stato richiesto e un valore predefinito se necessario.
  5. Salva e chiudi Studio.

Studio crea il campo con un prefisso x_studio_ e lo aggiunge immediatamente alla vista del modulo. Non è necessaria alcuna migrazione del database da parte tua.

Utilizzando Python in un Modulo Personalizzato

Per gli sviluppatori che creano moduli Odoo, i campi Data sono definiti nei file modello Python. Questo è l'approccio giusto per qualsiasi personalizzazione che deve essere controllata in versione e distribuita su più ambienti:

from odoo import fields, models

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

    x_customer_requested_date = fields.Date(
        string='Data Richiesta dal Cliente',
        index=True,
        copy=False,
        help='Data di consegna richiesta dal cliente al momento dell'ordine.',
    )

Dopo aver aggiunto il campo al modello, è necessario aggiungerlo anche al file XML della vista pertinente affinché appaia nell'interfaccia. Odoo gestisce la creazione della colonna del database quando installi o aggiorni il modulo.

Utilizzando l'API XML-RPC

Per la creazione programmatica dei campi come parte di una pipeline di distribuzione o di un notebook di configurazione remota, puoi creare campi Data tramite l'API XML-RPC di Odoo:

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

Il valore ttype per un campo Data è 'date'. Per un campo DataOra sarebbe 'datetime'. Utilizzare 'manual' come stato indica a Odoo che questo campo è stato creato manualmente, non tramite l'installazione di un modulo. Questo è il modo in cui Dasolo gestisce la creazione remota dei campi per i clienti come parte di script di configurazione automatizzati.

Migliori pratiche


1. Usa Date, non DateTime, quando il tempo è irrilevante

Se l'unica cosa che conta è la data del calendario (una scadenza, una data di contratto, una data di nascita, una data di scadenza), usa fields.Date. Scegliere DateTime per dati puramente basati sulla data aggiunge complessità di fuso orario senza alcun beneficio pratico e può causare confusi bug di un giorno a causa della configurazione del fuso orario del server.

2. Imposta un valore predefinito significativo quando ha senso

Per campi come "Data di Consegna Prevista" o "Data di Follow-up", impostare come predefinito oggi o oggi più un certo numero di giorni offre agli utenti un punto di partenza sensato. Usa default=fields.Date.today senza parentesi per un valore predefinito dinamico che viene valutato al momento della creazione del record, non al momento della definizione della classe.

3. Indicizza i campi data utilizzati in report e filtri di ricerca

Se i tuoi utenti filtrano regolarmente i record per un campo data (fatture scadute, rinnovi imminenti, certificazioni in scadenza), aggiungi index=True. Su grandi dataset, questo migliora notevolmente le prestazioni di filtro e report. È un piccolo cambiamento con un impatto significativo su larga scala e costa quasi nulla da implementare in anticipo.

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

Date come "Data di Inizio Contratto" o "Data di Scadenza" non dovrebbero essere copiate quando un utente duplica un record. Aggiungere copy=False costringe l'utente a impostare esplicitamente la data sul nuovo record, evitando errori silenziosi in cui una data obsoleta persiste su un contratto duplicato o un'attività di progetto.

5. Aggiungi vincoli quando due campi data formano un intervallo

Ogni volta che un modello ha una coppia "Data di Inizio" e "Data di Fine", aggiungi un vincolo Python usando @api.constrains per garantire che la data di fine non sia precedente alla data di inizio. Questo è semplice da implementare e previene un'intera categoria di problemi di qualità dei dati che sono fastidiosi da diagnosticare dopo il fatto.

Trappole comuni


Campi Date e DateTime confusi

Questo è l'errore più frequente quando si lavora con dati sensibili al tempo in Odoo. DateTime memorizza un timestamp completo in UTC e converte in visualizzazione. Date memorizza solo la data del calendario senza conversione. Usare DateTime quando hai solo bisogno di una data porta a problemi di fuso orario: una data inserita come 15 marzo in un ambiente UTC+2 potrebbe apparire come 14 marzo per un utente UTC-5.

Utilizza sempre il tipo di campo più semplice che soddisfi le tue reali esigenze aziendali.

Non tenere conto del fuso orario del server nelle azioni programmate

Quando costruisci azioni programmate o report che filtrano un campo Data rispetto a "oggi", fai attenzione che fields.Date.today() restituisce la data del server in UTC. Per la maggior parte dei casi d'uso di reporting questo va bene, ma può causare discrepanze di un giorno per i team in fusi orari che differiscono significativamente dal server. Testa le automazioni dipendenti dalla data da più fusi orari se il tuo team è distribuito a livello globale.

Vincoli mancanti su coppie di intervallo di date

È comune vedere implementazioni in cui "Data di inizio" e "Data di fine" esistono come campi separati, ma nessuna validazione garantisce che la data di fine sia dopo la data di inizio. Questo consente a dati non validi di entrare nel sistema silenziosamente, interrompendo i calcoli della durata, i risultati dei filtri e i report. Aggiungi sempre un controllo @api.constrains quando due date formano un intervallo logico.

Dimenticare di indicizzare i campi data utilizzati nei filtri

I campi data utilizzati nei controlli "scaduti", nelle visualizzazioni delle "scadenze imminenti" o nei report sui saldi invecchiati vengono tipicamente interrogati con confronti come "data inferiore a oggi". Senza un indice, ogni query di questo tipo è una scansione completa della tabella. Su modelli con grandi conteggi di record come fatture, compiti o movimenti di magazzino, la mancanza di indici sui campi Data rallenta notevolmente le operazioni quotidiane nel tempo.

Memorizzare le date come campi Char

Alcuni team memorizzano le date come stringhe di testo in campi Char per preservare un formato personalizzato o evitare il selettore di date. Questo interrompe completamente l'ordinamento, il filtraggio, l'aritmetica delle date e il reporting. Utilizza sempre il tipo corretto fields.Date. Il framework e il database Odoo gestiscono automaticamente il formato e la localizzazione, quindi non c'è motivo pratico di memorizzare le date come testo semplice.

FAQ


Qual è la differenza tra un campo Data e un campo DataOra in Odoo?

Un campo Data memorizza solo una data del calendario (anno, mese, giorno) senza componente temporale. Un campo DataOra memorizza un timestamp completo che include ore, minuti e secondi, salvato in UTC e visualizzato nel fuso orario locale dell'utente. Usa Data quando l'ora del giorno è irrilevante per il processo aziendale. Usa DataOra quando hai bisogno di tracciare esattamente quando è accaduto qualcosa.

Come posso impostare la data odierna come predefinita per un campo Data?

In Python, usa default=fields.Date.today senza parentesi. Questo è un callable che Odoo valuta al momento della creazione del record, quindi il valore predefinito è sempre la data corrente piuttosto che una data fissa incorporata nella definizione della classe. In Odoo Studio, seleziona "Oggi" come valore predefinito nel pannello delle proprietà del campo.

Posso calcolare un campo Data basato su altri valori di campo?

Sì. Definisci il campo con compute='_compute_my_date' e scrivi un metodo decorato con @api.depends() elencando i campi che attivano la ricomputazione. All'interno del metodo, esegui calcoli di data utilizzando datetime.date o timedelta di Python. Aggiungi store=True se desideri che il risultato venga salvato nel database per l'uso in filtri di ricerca, raggruppamenti ed esportazioni.

Come posso filtrare i record in base a un intervallo di date in un dominio Odoo?

Usa operatori di confronto standard nel dominio. Ad esempio, per trovare record in cui il campo data rientra nel marzo 2026:

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

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

Posso rendere un campo Data obbligatorio solo in determinate condizioni?

Lo standard Odoo non applica campi obbligatori condizionali nel backend senza codice. Puoi usare attrs nel XML della vista per contrassegnare visivamente un campo come obbligatorio in base ad altri valori, ma la vera applicazione nel backend richiede una restrizione Python utilizzando @api.constrains. Per casi semplici, le regole di visibilità condizionale di Odoo Studio forniscono un sostituto pratico senza scrivere codice.

Conclusione


Il campo Data è uno dei tipi di campo più pratici nel framework Odoo. È semplice da capire, facile da usare e abbastanza potente da guidare logiche aziendali importanti come promemoria, controlli di scadenza e reportistica sensibile al tempo.

Le cose chiave da tenere a mente: usa Data piuttosto che DateTime quando hai bisogno solo di una data di calendario, comprendi come i valori predefiniti e gli indici migliorano l'usabilità e le prestazioni, e aggiungi sempre vincoli quando due campi data definiscono un intervallo.

Costruire modelli di dati puliti e ben progettati in Odoo inizia con piccole decisioni come scegliere il tipo di campo giusto. Avere queste scelte corrette fin dall'inizio è uno dei segni distintivi di una solida implementazione di Odoo, e il campo Data è un pezzo fondamentale di quel puzzle.

Da Dasolo, aiutiamo le aziende a implementare, personalizzare e ottimizzare Odoo in tutti i reparti e processi aziendali. Che tu abbia bisogno di aiuto per progettare un modello di dati pulito, aggiungere campi e flussi di lavoro personalizzati, o costruire un modulo Odoo completo da zero, il nostro team è qui per aiutarti. Contattaci e parliamo del tuo progetto Odoo.

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