Passa al contenuto

Campo Obbligatorio in Odoo: Come Funziona e Usarlo al Meglio

Guida pratica a uno dei meccanismi di validazione più importanti nel modello dati di Odoo
6 marzo 2026 di
Campo Obbligatorio in Odoo: Come Funziona e Usarlo al Meglio
Dasolo
| Ancora nessun commento

Introduzione


Se hai mai provato a salvare una scheda in Odoo e hai visto entrare in scena un evidenziatore rosso su un campo, hai già sperimentato il meccanismo del campo obbligatorio. È uno degli strumenti più immediati per garantire che i dati fondamentali vengano sempre registrati durante i processi aziendali.


Che tu stia configurando Odoo per il commerciale, creando un modello personalizzato o lavorando su uno sviluppo tecnico, sapere come funziona l’attributo required ti aiuta a evitare errori e a ottenere flussi più affidabili.


Questo articolo spiega tutto l’essenziale: il comportamento del vincolo nel framework Odoo, come attivarlo da Studio o in Python, i casi d’uso tipici e i rischi da evitare in produzione.

Cos’è il campo obbligatorio in Odoo


In Odoo, l’attributo required è una regola applicata al singolo campo che impedisce il salvataggio di un record se quel campo è vuoto. Si applica alla maggior parte dei tipi di campo: testo, numerici, selezione, many2one, date e via dicendo.


Fa parte del modello dati di base ed è uno degli attributi più usati nelle personalizzazioni: dichiarare un campo come obbligatorio è spesso il primo passo per mantenere il database coerente e completo.


Come si vede nell’interfaccia

Nell’interfaccia di Odoo i campi obbligatori si distinguono da quelli opzionali. In modifica mostrano un’indicazione visiva e, se si tenta di salvare senza averli compilati, il sistema segnala l’errore evidenziando il campo in rosso e mostrando un messaggio di validazione.


Questa reazione immediata sull’interfaccia aiuta gli utenti a correggere subito gli omissioni, riducendo l’invio di record incompleti.


Obbligo statico e dinamico

Esistono due modalità principali per rendere un campo obbligatorio: statico (sempre richiesto) o dinamico (richiesto solo se certe condizioni sono soddisfatte, ad esempio in funzione di altri campi nel record).


Entrambe le modalità sono utili; la scelta dipende dalla logica di processo che vuoi far rispettare.


Come funziona il vincolo


Capire come il required viene applicato a livello tecnico è fondamentale per usarlo correttamente e risolvere eventuali problemi.


Validazione a livello applicazione

Un dettaglio importante: l’attributo required viene applicato dall’applicazione, non direttamente dal database. La verifica avviene nell’ORM di Odoo al momento di create() o write(), prima che l’operazione raggiunga PostgreSQL.

Di conseguenza, impostare required=True non aggiunge automaticamente un vincolo NOT NULL alla colonna SQL sottostante: la logica di controllo è implementata in Python nell’ORM.


In pratica significa che se qualcuno inserisse dati direttamente nel database ignorando l’ORM, la regola non verrebbe applicata. Perciò è sempre consigliabile interagire con i dati tramite l’ORM o le API ufficiali.


Cosa succede se il vincolo viene infranto

Quando si tenta di salvare una scheda con un campo obbligatorio vuoto, succede principalmente questo:

  • l’interfaccia mette in evidenza il campo e mostra un avviso di validazione
  • l’operazione di salvataggio viene bloccata finché non viene inserito un valore

Se la validazione viene effettuata tramite codice (ad esempio via API o action lato server), l’ORM solleva una ValidationError che indica quale campo obbligatorio manca.


Obbligo dinamico con le espressioni nelle viste

In Odoo il required può essere reso condizionale a livello di vista usando espressioni sugli attributi. Nelle versioni precedenti si usava attrs nelle definizioni XML delle view:


l’idea è applicare la condizione direttamente nella vista per rendere il campo obbligatorio solo in certe situazioni (per esempio se un tipo d’ordine è “consegna”).

Con le versioni più recenti la sintassi delle view è stata semplificata, permettendo di esprimere condizioni in modo più leggibile direttamente nell’attributo required del tag field.

In pratica si dichiara quando la regola deve scattare nell’interfaccia, valutando altri campi del record.

Ricorda però che queste regole vivono nella vista: required=True nel modello resta il vincolo più rigoroso, mentre le espressioni di vista valgono solo quando si usa quella specifica interfaccia.


Interazione con ORM e API

Quando si chiama create() o write() sull’ORM, Odoo controlla tutti i campi dichiarati required=True prima di eseguire l’operazione. Se manca un valore, viene sollevata una ValidationError.


Lo stesso vale per le chiamate via XML-RPC o altre API: i dati passati devono includere i campi obbligatori altrimenti la creazione del record fallisce.

Esempi pratici in azienda


Esempi aziendali concreti


1. CRM: segmento cliente obbligatorio per i lead

Se il team commerciale non assegna subito un segmento al lead, poi diventa difficile analizzare le performance per segmento. Senza obbligo, il campo tende a essere saltato.


Rendendo obbligatorio il campo “Segmento Cliente” sul form dei lead, si cattura l’informazione al momento della creazione: nessun segmento, nessun salvataggio.


2. Vendite: indirizzo di consegna obbligatorio sugli ordini

Per chi spedisce beni materiali l’indirizzo di consegna è essenziale. In alcune configurazioni non è richiesto per default, il che può portare a conferme d’ordine incomplete.


Impostare l’indirizzo di consegna come obbligatorio evita che un ordine venga confermato senza le informazioni logistiche necessarie, riducendo errori nella gestione della logistica.


3. Magazzino: lotto o numero di serie obbligatorio alla ricezione

In settori regolamentati (alimentare, farmaceutico, elettronica) il tracciamento del lotto è indispensabile. Odoo supporta questa esigenza tramite le impostazioni di tracciabilità, che rendono il lotto/seriale obbligatorio durante i movimenti di magazzino.


Per campi personalizzati sul modulo di ricezione, come un riferimento di controllo qualità, renderli obbligatori garantisce che il magazzino registri sempre le informazioni richieste alla ricezione.


4. Contabilità: centro di costo obbligatorio sulle fatture fornitore

Il reparto finance spesso necessita che ogni costo venga imputato a un centro di costo per monitorare il budget. Se il campo resta vuoto, i report risultano incompleti.


Aggiungendo un many2one obbligatorio verso il modello dei centri di costo sul form delle fatture fornitore, si evita la registrazione di fatture senza imputazione, migliorando la qualità dei dati contabili.


5. Risorse umane: tipo di contratto obbligatorio prima dell’onboarding

Nel processo di assunzione, HR vuole che il tipo di contratto sia confermato prima di finalizzare la scheda dipendente. Un campo obbligatorio sul form previene salvataggi accidentali di record incompleti durante i picchi di attività.

Creare o personalizzare il campo


Due strade per rendere un campo obbligatorio: la soluzione no-code con Odoo Studio o l’approccio tecnico in Python. La scelta dipende dall’impatto che vuoi ottenere.


Con Odoo Studio

Odoo Studio è lo strumento no-code incluso che permette di configurare i campi senza scrivere codice. Aprendo Studio e selezionando un campo trovi un interruttore “Required” nelle proprietà del campo.


Attivando quell’opzione dichiari il campo come obbligatorio nella vista e imposti la proprietà a livello di modello: è la via più veloce per casi semplici e non richiede competenze di sviluppo.


Il limite di Studio è che gestisce principalmente obblighi statici a livello di vista. Per comportamenti condizionali complessi è necessario intervenire direttamente sul codice o modificare il XML della vista.


Approccio tecnico: campi Python

In un modulo Odoo personalizzato, dichiarare un campo obbligatorio si fa aggiungendo required=True nella definizione del campo Python. È il metodo standard per le personalizzazioni robuste.


Con questo approccio il vincolo viene applicato a livello di modello, quindi vale indipendentemente dall’interfaccia usata per creare o modificare il record.

Nel dettaglio, impostare required in Python rende la regola globale: non può essere aggirata cambiando la vista.


Obbligo dinamico nelle view XML

Se il requisito è valido solo in particolari condizioni, è meglio applicare l’obbligo nella vista invece che nel modello. Questo permette di renderlo attivo solo quando serve.


Ad esempio, puoi far sì che il centro di costo sia obbligatorio solo se il tipo d’ordine è fatturato, definendo la condizione nella view.

Nelle release più nuove la sintassi delle view è più chiara per questo tipo di espressioni logiche.

Il risultato è una regola applicata solo quando l’interfaccia specifica viene utilizzata per editare il record.

Ricorda: la regola a livello di vista è meno vincolante del required nel modello, perché vale solo per quella view.


Creare campi obbligatori tramite API

Se automatizzi la creazione di campi via XML-RPC o altre chiamate a ir.model.fields, puoi impostare l’attributo required durante la create: questo è utile per deployment automatizzati.


Questa modalità permette di creare il campo e attivare il vincolo in un’unica operazione, comoda per scenari di provisioning automatico in ambienti enterprise.

È una pratica diffusa quando si gestiscono distribuzioni Odoo tramite script o tool di migrazione.

Buone pratiche


Impostare un campo obbligatorio è semplice, ma farlo bene richiede attenzione: ecco alcune regole pratiche per evitare problemi e ridurre la frustrazione degli utenti.


1. Rendi obbligatori solo i campi davvero necessari

Un errore comune è rendere troppi campi obbligatori. Se un utente non dispone dell’informazione al momento della compilazione, rischia di inserire valori fittizi per aggirare il vincolo, compromettendo la qualità dei dati.


Prima di impostare l’obbligo chiediti: questa informazione è sempre disponibile al punto di inserimento? Se la risposta non è un sì netto, valuta di rendere il campo obbligatorio in una fase successiva del flusso o di usare una condizione dinamica.


2. Preferisci validazioni legate allo stato o alla fase del processo

Per processi in più fasi, è spesso meglio verificare la presenza di certi dati solo in momenti precisi (ad esempio al passaggio di stato) tramite constraint Python o azioni automatiche, piuttosto che obbligare tutto fin dall’inizio.


Questo approccio è più flessibile e migliora l’esperienza utente rispetto a rendere tutto obbligatorio subito.


3. Associa valori di default quando ha senso

Se un campo è obbligatorio ma nella maggior parte dei casi assume un valore prevedibile, definire un default riduce l’attrito per gli utenti senza compromettere la presenza del dato.


4. Usa required a livello di modello per i dati critici

Per informazioni davvero critiche (dati contabili, identificativi regolamentari, ecc.) è preferibile forzare il vincolo nel modello Python: le regole a livello di vista possono essere aggirate attraverso API o altre viste che non le contengono.


5. Comunica i cambiamenti agli utenti

Quando aggiungi nuovi campi obbligatori su form già in uso, avvisa il personale prima della distribuzione: gli utenti potrebbero trovare blocchi durante attività in corso se non sono preparati.


6. Testa con dati parziali e vuoti

Prima di mettere in produzione nuove regole, verifica i flussi con valori mancanti e parziali via interfaccia, API e automazioni. Questo step evita sorprese e disservizi dopo il deploy.

Errori ricorrenti


Anche i più esperti inciampano in problemi legati ai campi obbligatori; conoscere i rischi più frequenti accelera la risoluzione e previene rollback costosi.


Falso passo 1: rendere obbligatorio un campo su un modello già popolato

Se imposti required=True su un campo in un modello che ha già migliaia di record senza quel valore, gli utenti potrebbero non riuscire più a salvare i record quando li modificano. Questo blocco può creare disservizi immediati.

Prima di applicare un vincolo su un campo esistente, verifica i dati attuali e, se necessario, esegui una migrazione per popolare il campo prima del deploy.


Falso passo 2: confondere vincoli di vista e di modello

Un campo marcato come obbligatorio nella vista (Studio o XML) non garantisce lo stesso vincolo a livello di modello: un import, una chiamata API o una vista diversa possono bypassare la regola.


Se serve un vincolo rigoroso, metti required=True nella definizione Python del campo: è un punto spesso frainteso che causa problemi di qualità dati in produzione.


Falso passo 3: automazioni e action programmate che non forniscono i nuovi campi obbligatori

Se azioni automatiche o job programmati creano record, devono essere aggiornati per includere i nuovi campi obbligatori. Altrimenti inizieranno a fallire o a generare errori criptici dopo la modifica del modello.


Rivedi tutte le automazioni che creano record quando aggiungi un campo obbligatorio a un modello esistente.


Falso passo 4: importare file senza i campi obbligatori

Un import CSV o tramite lo strumento di importazione fallirà se mancano i campi obbligatori. È il comportamento corretto, ma spesso sorprende chi è abituato a importare dati parziali.


Includi sempre i campi obbligatori nei template di import e documenta chiaramente quali campi sono richiesti nei processi di caricamento dati.


Falso passo 5: usare required invece di constraint Python per validazioni complesse

L’attributo required verifica solo che il campo non sia vuoto; non può controllare regole più articolate come relazioni fra campi o condizioni temporali. Per validazioni complesse usa @api.constrains in Python.


Tentare di racchiudere tutta la logica di business in required porta a configurazioni rigide e difficili da mantenere.

Conclusione


Il campo obbligatorio è uno strumento semplice ma potente: ben usato migliora la qualità dei dati e fa emergere le informazioni critiche nel momento giusto; mal impiegato genera frustrazione e workaround che peggiorano i dati invece di migliorarli.


La cosa fondamentale è saper distinguere tra vincoli a livello di modello e vincoli a livello di vista, valutare con cura quali campi richiedono veramente l’obbligatorietà e prevedere l’impatto su automazioni e integrazioni.


Che tu stia seguendo una guida per sviluppatori, facendo una personalizzazione complessa o modificando un form con Studio, comprendere a fondo il required fa la differenza tra un’implementazione ordinata e una che crea problemi a distanza di mesi.

Hai bisogno di supporto per la tua implementazione Odoo?


Noi di Dasolo affianchiamo le aziende nell’implementazione, personalizzazione e ottimizzazione di Odoo su processi di qualsiasi complessità. Dalla modellazione dati alla costruzione di moduli custom, portiamo esperienza tecnica e funzionale in ogni progetto.


Se hai dubbi su campi obbligatori o su altri aspetti della tua configurazione Odoo, possiamo darti una mano. Contattaci e parliamo insieme del tuo progetto.

Campo Obbligatorio in Odoo: Come Funziona e Usarlo al Meglio
Dasolo 6 marzo 2026
Condividi articolo
Accedi per lasciare un commento