Introduzione
Il campo Booleano è uno dei tipi di campo più semplici in Odoo e anche uno dei più utilizzati. Ogni volta che selezioni una casella di controllo su un ordine di vendita, contrassegni un cliente come attivo o contrassegni un prodotto come preferito, stai interagendo con un campo Booleano.
Nonostante la sua semplicità, il campo Booleano presenta alcuni comportamenti che vale la pena comprendere a fondo. Sapere quando utilizzarlo, quando non utilizzarlo e come configurarlo correttamente ti aiuterà a costruire ambienti Odoo più puliti e a evitare alcuni errori comuni che anche i team più esperti possono commettere.
Questa guida copre il campo Booleano da ogni angolazione: cosa memorizza, come si comporta nel modello dati di Odoo e nell'interfaccia utente, come crearlo o personalizzarlo utilizzando Odoo Studio o Python, casi d'uso aziendali reali e suggerimenti pratici per ottenere il massimo da questo tipo di campo.
Cos'è il campo Booleano in Odoo
Nell'ORM di Odoo, il campo Booleano memorizza uno dei due valori: True o False. Si mappa direttamente a una colonna BOOLEAN in PostgreSQL. Non c'è ambiguità qui: il campo è o selezionato o deselezionato, abilitato o disabilitato, sì o no.
Dal punto di vista dell'utente, un campo Booleano appare come una casella di controllo nelle viste dei moduli. Nelle viste elenco, di solito viene visualizzato come un'icona di spunta quando il valore è Vero e nulla quando è Falso. In alcune configurazioni appare come un interruttore invece di una tradizionale casella di controllo, a seconda del widget applicato.
Ecco come appare la definizione di un campo Booleano in un modulo Python Odoo:
from odoo import fields, models
class SaleOrder(models.Model):
_inherit = 'sale.order'
needs_manual_review = fields.Boolean(
string='Needs Manual Review',
default=False,
)
Il parametro string imposta l'etichetta mostrata nell'interfaccia. Il parametro default controlla il valore iniziale quando vengono creati nuovi record. Senza un valore predefinito, Odoo tratta il campo come False automaticamente, ma è considerata buona pratica dichiararlo esplicitamente.
In Odoo Studio, questo stesso tipo di campo è semplicemente chiamato Checkbox. I campi creati tramite Studio ricevono automaticamente un prefisso x_studio_. Quando vengono creati tramite Python o l'API XML-RPC, definisci tu stesso il nome tecnico.
Come funziona il campo
Quando aggiungi un campo Booleano a un modello Odoo, il framework crea automaticamente la corrispondente colonna nel database PostgreSQL durante l'installazione o l'aggiornamento del modulo. Non è necessaria alcuna migrazione SQL manuale.
Una cosa importante da capire: in Odoo, un campo Booleano non contiene mai None o NULL. L'ORM restituisce sempre True o False. Anche se la colonna del database non ha valore, Odoo restituirà False quando leggi il campo. Questo è diverso da altri tipi di campo come Many2one o Char, dove un valore vuoto torna come False o None e devi controllare entrambi.
Attributi Chiave del Campo
Ecco le principali proprietà che puoi configurare su un campo Booleano nel framework Odoo:
- default: Imposta il valore quando viene creato un nuovo record. Quasi sempre impostato su
False, ma può essereTrueper scenari di opt-out. - compute: Collega un metodo Python che calcola il valore in modo dinamico. Utile per flag derivati basati sullo stato di altri campi.
- store: Quando usato con
compute, determina se il valore viene salvato nel database. Constore=True, i campi Booleani calcolati possono essere utilizzati nei filtri di ricerca e nei report. - readonly: Impedisce agli utenti di modificare manualmente il valore del campo nell'interfaccia. Comune per i flag calcolati che dovrebbero essere impostati solo dal sistema.
- copy: Controlla se il valore del campo viene trasferito quando si duplica un record. Di default è impostato su
True. Per flag come "è approvato", di solito si desideracopy=Falsein modo che i record duplicati partano da zero. - groups: Limita la visibilità e la modifica a specifici gruppi di utenti.
Come appare nelle visualizzazioni
Nelle visualizzazioni dei moduli, un campo Booleano viene visualizzato come una normale casella di controllo HTML. Nelle visualizzazioni a elenco, Odoo mostra un'icona di spunta per True e nulla per False per impostazione predefinita. Questo rende le visualizzazioni a elenco facili da scansionare visivamente.
Puoi cambiare come un campo Booleano viene visualizzato utilizzando i widget di visualizzazione. Il widget toggle lo visualizza come un interruttore invece di una casella di controllo, il che funziona bene per impostazioni o preferenze. Per la visualizzazione in sola lettura, il widget boolean_favorite rende il valore come un'icona a forma di stella, che puoi vedere nei moduli di prodotto e contatto in Odoo standard.
Utilizzo dei campi Booleani nei filtri di dominio
I campi Booleani sono molto comodi da usare nei domini di Odoo, che sono le espressioni di filtro utilizzate nelle visualizzazioni di ricerca, azioni automatizzate e regole di accesso. Un filtro per record non selezionati appare così:
[('needs_manual_review', '=', True)]
Poiché ci sono solo due valori possibili, puoi anche utilizzare la forma più semplice senza l'operatore:
[('needs_manual_review', '=', False)]
Questo comportamento di filtraggio diretto è uno dei motivi per cui i campi Booleani si integrano così bene con le azioni automatizzate di Odoo, le azioni programmate e le azioni del server. Sono facili da controllare e agire senza condizioni complesse.
Interazione con l'ORM di Odoo
Leggere e scrivere campi Booleani nello sviluppo di Odoo è semplice come può essere. Accedi al valore sull'oggetto record, confrontalo con True o False e assegnalo direttamente. L'ORM gestisce tutto il resto. Non ci sono conversioni, nessun caso limite di serializzazione e nessuna sorpresa quando si passano valori attraverso l'API XML-RPC, poiché True e False si mappano pulitamente ai loro equivalenti booleani XML-RPC.
Casi d'uso aziendali
I campi Booleani appaiono in ogni dipartimento in una tipica implementazione di Odoo. Ecco cinque esempi pratici da flussi di lavoro aziendali reali.
CRM: Monitorare se un Lead è Stato Qualificato
I team di vendita spesso devono contrassegnare quali lead sono stati esaminati da un rappresentante senior e confermati come opportunità valide. Un campo Booleano chiamato is_qualified nel modello di lead CRM offre ai team un modo semplice per filtrare il loro pipeline. I lead non qualificati possono essere gestiti dal personale junior, mentre quelli qualificati ricevono attenzione prioritaria. Questa semplice casella di controllo sostituisce la necessità di una fase dedicata o di un campo di stato solo per questo scopo.
Vendite: Contrassegnare gli Ordini che Necessitano di Revisione Manuale
In alcune aziende, determinati ordini di vendita richiedono un'approvazione extra prima di essere confermati, ad esempio ordini superiori a un certo importo o per nuovi clienti. Un campo Booleano needs_manual_review sull'ordine di vendita, combinato con un'azione automatizzata che lo imposta su True in base a regole aziendali, fornisce al team finanziario o operativo una chiara indicazione da cui lavorare. Possono filtrare l'elenco degli ordini in base a questo campo e elaborare le approvazioni senza dover esaminare l'intero elenco degli ordini.
Inventario: Contrassegnare i Prodotti come Fuori Catalogo
Quando un prodotto non è più venduto ma deve comunque rimanere nel sistema per registri storici, archiviarlo non è sempre l'opzione giusta. Un campo Booleano is_discontinued nel modello di prodotto consente ai team di acquisto e vendite di vedere a colpo d'occhio che l'articolo non dovrebbe essere riordinato o quotato ai clienti. Puoi utilizzare questo campo nei filtri dei listini prezzi, nelle regole di convalida degli ordini di acquisto e nelle impostazioni di visibilità del negozio online.
Contabilità: Identificare le Fatture che Richiedono Attenzione
I team finanziari a volte devono contrassegnare le fatture che sono state contestate, contengono una discrepanza di prezzo o sono in attesa di una nota di credito. Piuttosto che fare affidamento su note di testo libero nella chat, un campo Booleano under_dispute offre al team un modo strutturato per filtrare e riportare queste fatture. I promemoria automatici possono anche essere soppressi per le fatture con questo flag impostato su True, evitando pressioni di pagamento non necessarie su un cliente mentre un problema viene risolto.
HR: Monitorare Certificazioni e Completamento della Formazione
I dipartimenti HR spesso devono confermare che i dipendenti abbiano completato la formazione obbligatoria o possiedano una certificazione richiesta. Un campo Booleano nel record del dipendente, come safety_training_completed, fornisce un modo semplice e auditabile per tenere traccia di questo. I manager possono filtrare l'elenco del loro team per vedere chi deve ancora completare la formazione, e i dati possono alimentare i rapporti di conformità senza costruire un modulo dedicato complesso.
Creazione o personalizzazione del campo Booleano
Ci sono tre approcci principali per aggiungere un campo Booleano a un modello Odoo, a seconda della tua configurazione tecnica e del livello di personalizzazione di cui hai bisogno.
Utilizzando Odoo Studio (No Code)
Odoo Studio è lo strumento integrato low-code per personalizzare Odoo senza scrivere alcun codice Python o XML. Per aggiungere un campo Booleano tramite Studio:
- Apri Odoo Studio dal menu principale (richiede l'app Studio).
- Naviga al modulo in cui desideri aggiungere il campo.
- Trascina un campo Checkbox dalla barra laterale nel layout del modulo.
- Imposta l'etichetta, il valore predefinito e eventuali vincoli richiesti o di sola lettura nel pannello delle proprietà del campo.
- Salva e chiudi Studio.
Studio gestisce tutto automaticamente: il campo viene creato nel database con un prefisso x_studio_ e aggiunto alla vista. Non è necessario alcun riavvio o aggiornamento.
Utilizzando Python in un Modulo Personalizzato
Per gli sviluppatori che costruiscono moduli Odoo, i campi Booleani sono definiti direttamente nei file modello Python. Questo è l'approccio raccomandato per qualsiasi personalizzazione che deve essere controllata in versione, testata e distribuita su più ambienti:
from odoo import fields, models
class ResPartner(models.Model):
_inherit = 'res.partner'
x_is_key_account = fields.Boolean(
string='Key Account',
default=False,
copy=False,
)
Dopo aver definito il campo, lo aggiungi al file XML della vista pertinente affinché appaia nell'interfaccia. Odoo crea la colonna del database quando il modulo viene installato o aggiornato.
Per i campi Boolean calcolati, il modello appare così:
from odoo import api, fields, models
class SaleOrder(models.Model):
_inherit = 'sale.order'
is_high_value = fields.Boolean(
string='High Value Order',
compute='_compute_is_high_value',
store=True,
)
@api.depends('amount_total')
def _compute_is_high_value(self):
for order in self:
order.is_high_value = order.amount_total >= 10000
Con store=True, il valore calcolato viene salvato nel database, rendendolo disponibile nei filtri di ricerca e nel raggruppamento della vista elenco senza ricalcolare ad ogni caricamento della pagina.
Utilizzando l'API XML-RPC
Se gestisci le personalizzazioni di Odoo in modo programmatico, ad esempio come parte di una pipeline di distribuzione o di uno script di configurazione remota, i campi Boolean possono essere creati tramite l'API XML-RPC sul modello ir.model.fields:
field_id = models.execute_kw(
ODOO_DB, uid, ODOO_API_KEY,
'ir.model.fields', 'create',
[{
'name': 'x_needs_manual_review',
'field_description': 'Needs Manual Review',
'model_id': model_id,
'ttype': 'boolean',
'state': 'manual',
}]
)
Il valore state: manual indica a Odoo che questo campo è stato creato al di fuori di un modulo, che è l'impostazione corretta per i campi creati tramite Studio o l'API. Questo è esattamente come Dasolo gestisce la creazione remota di campi per i clienti come parte dei flussi di lavoro di configurazione automatizzati.
Migliori pratiche
1. Definisci sempre un valore predefinito
Anche se Odoo restituisce False per i campi Boolean senza predefinito, è buona prassi dichiarare esplicitamente default=False nella definizione del tuo campo. Comunica chiaramente l'intento a chiunque legga il codice del modello e previene ambiguità quando il campo viene utilizzato in azioni automatizzate o filtri.
2. Usa nomi descrittivi che suonano come domande
I nomi dei campi booleani funzionano meglio quando si leggono naturalmente come una domanda sì/no. Nomi come is_verified, needs_approval, has_warranty o is_key_account sono immediatamente comprensibili. Evita nomi vaghi come flag, status o check, che non dicono nulla su ciò che il campo rappresenta realmente.
3. Imposta copy=False per i flag di approvazione e stato
Se il tuo campo booleano rappresenta uno stato che non dovrebbe essere trasferito quando un record viene duplicato, ad esempio "è approvato" o "è stato inviato", aggiungi sempre copy=False. Altrimenti, duplicare un record copierà il valore del flag, il che può portare a record che appaiono approvati o inviati quando non hanno seguito il processo corretto.
4. Usa campi booleani calcolati per stati derivati
Evita di scrivere azioni server o codice Python che aggiornano manualmente un campo booleano in risposta a modifiche di altri campi. Invece, definiscilo come un campo calcolato con @api.depends(). Questo mantiene la tua logica in un unico posto, viene eseguito automaticamente ad ogni salvataggio ed è molto più facile da mantenere e debug rispetto a operazioni di scrittura sparse in più luoghi nel codice.
5. Aggiungi campi booleani alle viste di ricerca quando vengono utilizzati per il filtraggio
Se gli utenti hanno frequentemente bisogno di filtrare i record in base a un campo booleano, aggiungilo esplicitamente alla vista di ricerca. In Studio, abilita l'opzione di ricerca nel pannello delle proprietà del campo. Nel codice, aggiungilo all'XML della vista <search>. Questo offre agli utenti un pulsante di filtro pulito nella barra di ricerca invece di costringerli a utilizzare filtri avanzati ogni volta.
Errori comuni
Usare Boolean per uno stato che ha più di due opzioni
Questo è l'errore più comune che i team commettono con i campi booleani. Se un record può trovarsi in uno di tre o più stati, come "in attesa", "approvato" e "rifiutato", un campo booleano è lo strumento sbagliato. Finisci per aggiungere un secondo booleano, poi un terzo, e la logica diventa impossibile da gestire. Usa un campo di selezione o un corretto flusso di lavoro di stato invece. I campi booleani sono per situazioni genuinamente binarie.
Dimenticare di impostare copy=False sui flag di approvazione
Quando gli utenti duplicano record in Odoo, tutti i valori dei campi vengono copiati per impostazione predefinita. Un ordine contrassegnato come "approvato" o "revisionato" avrà quei flag impostati su True sul duplicato immediatamente. Se il record duplicato deve partire da una base pulita, aggiungi copy=False a ogni flag che rappresenta un'azione completata o uno stato raggiunto.
Non aggiungere il campo alla vista di ricerca
Un campo Booleano su cui gli utenti devono filtrare, ma che non è nella vista di ricerca, costringe a aprire il dialogo di filtro avanzato ogni volta. Questo rallenta significativamente i flussi di lavoro quotidiani. Se aggiungi un campo Booleano che le persone utilizzeranno per trovare record, fai il passo extra di aggiungerlo alla vista di ricerca contemporaneamente.
Utilizzare un campo Booleano invece del campo attivo
Odoo ha un campo active integrato nella maggior parte dei modelli che controlla se i record appaiono nelle viste standard. Se il tuo campo Booleano è destinato a nascondere o archiviare record, utilizza il campo nativo active e il suo meccanismo di attivazione/disattivazione piuttosto che costruire una soluzione di visibilità personalizzata. Questo mantiene il tuo modello di dati allineato con il comportamento standard di Odoo e si integra bene con le azioni di archiviazione e disarchiviazione già incorporate nell'interfaccia utente.
Campi Booleani calcolati senza store=True nei filtri
Se crei un campo Booleano calcolato e cerchi di utilizzarlo nei filtri di ricerca o nel raggruppamento della vista elenco senza store=True, Odoo solleverà un errore o ignorerà silenziosamente il filtro. I campi calcolati non memorizzati esistono solo in memoria e non possono essere utilizzati in query SQL. Se un Booleano calcolato deve essere filtrabile o riportabile, aggiungi sempre store=True alla definizione del campo.
Conclusione
Il campo Booleano è il tipo di campo che smetti di notare proprio perché funziona così bene. È ovunque in Odoo, dal flag active che controlla la visibilità dei record, al campo is_published che guida il tuo sito web, fino alle dozzine di flag personalizzati che le aziende aggiungono ai propri flussi di lavoro ogni giorno.
Comprendere come si comporta nel modello di dati di Odoo, come configurarlo correttamente con i giusti valori predefiniti e attributi, e quando usarlo rispetto ad altri tipi di campo come Selection ti aiuterà a costruire implementazioni che sono pulite, prevedibili e facili da mantenere.
Un campo Booleano ben fatto è invisibile per l'utente finale. Funziona e basta. Un campo Booleano utilizzato in modo errato crea confusione, stati corrotti e un crescente accumulo di soluzioni alternative. La differenza sta nel conoscere le regole e applicarle in modo coerente.
Da Dasolo, aiutiamo le aziende a implementare, personalizzare e ottimizzare Odoo in tutti i dipartimenti. Che tu abbia bisogno di aiuto per progettare un modello di dati pulito, aggiungere campi personalizzati ai tuoi flussi di lavoro, o costruire un intero modulo Odoo da zero, il nostro team è qui per supportarti. Contattaci e parliamo del tuo progetto Odoo.