Introduzione
Il campo Booleano è una delle tipologie più intuitive e diffuse in Odoo. Ogni volta che spunti una casella su un ordine di vendita, attivi o disattivi un cliente o selezioni un prodotto come preferito, stai usando proprio questo tipo di campo.
Semplice non significa banale: il Booleano ha comportamenti precisi che è utile conoscere. Sapere quando adottarlo, come impostarlo e quali limiti ha evita scelte progettuali che complicano il sistema nel tempo.
Questo articolo esplora il Booleano in profondità: cosa memorizza, come si presenta nell’interfaccia e nel modello dati, come crearlo via Studio o codice, esempi pratici di applicazione e suggerimenti operativi per sfruttarlo correttamente.
Cos’è il campo Booleano in Odoo
Nel cuore dell’ORM di Odoo il Booleano rappresenta una dicotomia netta: True o False. A livello di database si mappa su una colonna di tipo BOOLEAN in PostgreSQL: non c’è mezzo termine, lo stato è acceso o spento.
All’utente appare normalmente come una checkbox nei form. Nelle liste viene spesso mostrato con una spunta quando è True e lasciato vuoto quando è False; in alcuni casi, a seconda del widget scelto, può invece presentarsi come un interruttore a levetta.
Ecco l’idea di base di come si dichiara un campo Booleano in un modulo Python:
(Esempio di definizione Python in cui si aggiunge un campo booleano a un modello sale.order con etichetta e valore di default.)
Il parametro che definisce l’etichetta controlla cosa vede l’utente; il default stabilisce lo stato iniziale alla creazione del record. Anche se Odoo considera False quando non è presente un default, dichiararlo esplicitamente chiarisce l’intento del progettista.
Con Odoo Studio lo stesso tipo di campo è etichettato come Checkbox. I campi creati tramite Studio ottengono automaticamente un prefisso x_studio_, mentre chi sviluppa in Python sceglie il nome tecnico del campo.
Come funziona il campo
Quando aggiungi un Booleano a un modello, Odoo gestisce la creazione della colonna in PostgreSQL automaticamente durante l’installazione o l’aggiornamento del modulo: non serve intervento SQL manuale.
Un comportamento importante: Odoo non restituisce mai NULL per un Booleano. L’ORM ritorna sempre True o False; anche se la colonna non ha valore, la lettura restituisce False. Questo lo distingue da altri tipi di campo che possono essere None o vuoti.
Attributi chiave del campo
Queste sono le principali proprietà configurabili su un campo Booleano in Odoo:
- default: imposta lo stato iniziale quando si crea un nuovo record. Di solito False, ma può essere True per scenari opt-out.
- compute: collega un metodo Python che calcola il valore dinamicamente, utile per flag derivati dallo stato di altri campi.
- store: se usato con compute, decide se memorizzare il valore in database. Con store=True i Booleani calcolati diventano ricercabili e utilizzabili nei report.
- readonly: impedisce la modifica manuale nell’interfaccia, spesso usato per flag gestiti soltanto dal sistema.
- copy: definisce se il valore viene copiato durante la duplicazione del record. Di default True; per flag come “approvato” è meglio impostare copy=False.
- groups: limita visibilità e modifica a gruppi utente specifici.
Come si presenta nelle viste
Nel form si visualizza come una normale checkbox HTML. Nelle liste, per facilità di scansione visiva, Odoo mostra una spunta per True e nulla per False.
Puoi personalizzare il rendering con widget: il widget toggle mostra un interruttore, ideale per impostazioni; il widget boolean_favorite visualizza una stella, usato per preferiti su prodotti o contatti.
Uso dei Booleani nei filtri (domain)
I Booleani si prestano molto bene ai domini, espressioni usate per ricerche, azioni automatizzate e regole di accesso. Un filtro che seleziona i record spuntati è semplice e leggibile:
[('needs_manual_review', '=', True)]
Dato che i valori sono solo due, il filtro rimane intuitivo anche nella forma negativa:
[('needs_manual_review', '=', False)]
Questa chiarezza semplifica integrazione con azioni automatiche e pianificate: i Booleani sono facili da valutare senza condizioni complesse.
Interazione con l’ORM di Odoo
Leggere e scrivere un Booleano in sviluppo Odoo è diretto: si legge il valore dall’oggetto record, si confronta con True/False e si assegna. L’ORM si occupa del resto e non ci sono conversioni o problemi di serializzazione, anche con XML-RPC.
Casi d’uso aziendali
I Booleani sono presenti in ogni reparto: ecco cinque esempi concreti di come vengono usati nei processi aziendali.
CRM: segnare lead qualificati
In CRM può essere utile un flag tipo is_qualified per distinguere i lead già analizzati da quelli da contattare ancora. Con una checkbox si semplifica il filtro della pipeline: i lead non qualificati possono essere gestiti dal team junior, quelli verificati vanno priorizzati.
Vendite: ordini che richiedono revisione manuale
Alcuni ordini richiedono un controllo extra (es. importo elevato o cliente nuovo). Un campo needs_manual_review, impostato automaticamente dalle regole di business, permette a finanza o operation di avere una coda chiara da processare, filtrando rapidamente gli ordini da revisionare.
Magazzino: prodotti fuori catalogo
Quando un articolo non è più venduto ma deve restare nel sistema per storico, un Booleano is_discontinued segnala ai team di acquisto e vendita che l’articolo non va riordinato né proposto al cliente. Si può usare nelle regole di visibilità, nei listini e nelle validazioni d’ordine.
Contabilità: fatture che richiedono attenzione
Per le fatture contestate o in attesa di nota di credito, un flag under_dispute è più efficace delle note libere: permette filtrare, escludere promemoria automatici e tenere separate le pratiche in sospeso senza premere per incassi inappropriati.
Risorse umane: formazione e certificazioni
HR può usare Booleani per tracciare il completamento di corsi obbligatori o certificazioni (es. safety_training_completed). È un modo semplice, verificabile e utile per generare report di conformità senza sviluppare moduli complessi.
Creare o personalizzare un campo Booleano
Tre strade per aggiungere un Booleano a un modello Odoo, a seconda della dimestichezza tecnica e del livello di controllo richiesto.
Usare Odoo Studio (No Code)
Odoo Studio è lo strumento low-code per personalizzare senza scrivere Python o XML. Per aggiungere un Booleano con Studio:
- Apri Studio dal menu principale (richiede l’app Studio).
- Vai al form dove vuoi inserire il campo.
- Trascina una Checkbox dalla barra laterale sulla maschera.
- Definisci etichetta, valore di default e vincoli di sola lettura o obbligatorietà nelle proprietà del campo.
- Salva e chiudi Studio.
Studio crea automaticamente il campo in database con prefisso x_studio_ e lo aggiunge alla vista: non servono restart o upgrade del modulo.
Usare Python in un modulo personalizzato
Gli sviluppatori dichiarano i Booleani direttamente nei file Python del modello: questa è l’opzione consigliata per personalizzazioni versionate, testabili e distribuibili.
(Esempio di definizione Python che aggiunge un Booleano a res.partner con copy=False e label.)
Dopo aver definito il campo, lo aggiungi alla vista XML corrispondente per renderlo visibile. Odoo crea la colonna in database durante l’installazione o l’aggiornamento del modulo.
Per i campi Booleani calcolati si usa invece il pattern compute/depends:
(Esempio Python che definisce is_high_value come campo calcolato con store=True e dipendenza da amount_total.)
Con store=True il valore calcolato viene salvato in database e può essere usato nei filtri e nei raggruppamenti senza ricalcolo a ogni apertura di pagina.
Usare l’API XML-RPC
Se gestisci personalizzazioni in modo programmato o tramite script remoto, puoi creare campi Booleani via XML-RPC sul modello ir.model.fields:
(Esempio di chiamata execute_kw per creare un campo booleano con name, descrizione e ttype='boolean'.)
Impostare state='manual' segnala a Odoo che il campo è stato creato al di fuori di un modulo, comportamento adatto per campi generati tramite Studio o API, utile in workflow di provisioning automatizzato.
Buone pratiche
1. Definisci sempre un valore di default
Anche se Odoo ritorna False quando non c’è default, è buona pratica dichiarare esplicitamente default=False: rende il codice più leggibile e evita fraintendimenti quando il campo viene usato in azioni automatiche o filtri.
2. Scegli nomi che si leggano come una domanda
I nomi dei Booleani funzionano meglio se formulati come una domanda binaria: is_verified, needs_approval, has_warranty, is_key_account. Evita etichette vaghe come flag o status che non spiegano il significato del campo.
3. Imposta copy=False per flag di approvazione o stato
Se il Booleano rappresenta uno stato che non deve essere ereditato duplicando il record (es. approvato), usa copy=False. Altrimenti la duplicazione replicherà lo stato e creerà confusione operativa.
4. Usa campi calcolati per stati derivati
Quando il valore dipende da altri campi, definiscilo come compute con @api.depends invece di aggiornare manualmente il Booleano tramite azioni server. Questo centralizza la logica, la rende automatica e più semplice da mantenere.
5. Aggiungi il Booleano alle search view se serve a filtrare
Se gli utenti devono spesso filtrare per quel flag, inseriscilo nella search view (o attiva l’opzione in Studio). In questo modo avranno un filtro rapido nella barra di ricerca invece di usare sempre i filtri avanzati.
Errori comuni
Usare Booleano per stati con più di due opzioni
Errore frequente: voler modellare uno stato a tre o più valori con più Booleani. Per stati come pending/approved/rejected è preferibile usare un campo Selection o un workflow, altrimenti la logica diventa rapidamente ingestibile.
Dimenticare copy=False sui flag di approvazione
Quando si duplica un record, tutti i valori vengono copiati di default. Se non si mette copy=False su flag di approvazione o invio, la copia risulterà già marcata come completata senza aver effettuato il processo appropriato.
Non aggiungere il campo alla search view
Un Booleano usato frequentemente per filtrare ma non presente nella search view costringe l’utente a usare il filtro avanzato ogni volta, rallentando i flussi. Se pensi che sarà usato per trovare record, aggiungilo subito alla ricerca.
Usare Booleano invece del campo active
Odoo ha già un campo active su molti modelli per nascondere o archiviare record. Se l’obiettivo è la visibilità/archiviazione, meglio usare active e il suo meccanismo nativo anziché creare una soluzione custom che duplicherà funzionalità standard.
Computed Boolean senza store=True nei filtri
Se un Booleano calcolato non ha store=True non è disponibile nelle query SQL: non potrai usarlo in filtri o raggruppamenti e Odoo ignorerà o segnalerà l’errore. Se il campo deve essere filtrabile aggiungi sempre store=True.
Conclusione
Il campo Booleano è uno di quei dettagli che smetti di notare perché funziona: dallo active che gestisce la visibilità alle dozzine di flag personalizzati, è onnipresente nelle implementazioni Odoo.
Capire il suo comportamento nel modello dati, impostare i default e gli attributi corretti e scegliere quando usare un Selection invece del Booleano aiuta a mantenere l’installazione pulita, prevedibile e facile da gestire.
Un Booleano ben progettato è trasparente per l’utente: fa il suo lavoro senza attirare l’attenzione. Usato male crea confusione, stati incoerenti e una lista di eccezioni da gestire. La differenza sta nel conoscere le regole e applicarle con coerenza.
Da parte nostra, supportiamo aziende nell’implementazione, personalizzazione e ottimizzazione di Odoo su tutte le aree aziendali. Se servono consigli sul modello dati, campi personalizzati o sviluppo di moduli, possiamo affiancarvi. Contattaci Parliamo del tuo progetto Odoo.