Passa al contenuto

Campo Selezione in Odoo: Guida Completa

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

Introduzione


Ogni volta che un utente sceglie una priorità di lead, seleziona un metodo di pagamento o contrassegna un prodotto come attivo o archiviato in Odoo, è molto probabile che stia interagendo con un campo di selezione. È uno dei tipi di campo più pratici nel framework Odoo e uno dei più importanti da comprendere se si desidera costruire modelli di dati puliti e affidabili.


A differenza di un campo di testo libero in cui gli utenti possono digitare qualsiasi cosa, il campo di selezione limita l'input a un elenco predefinito di scelte. Questa restrizione è l'intero punto. Mantiene i tuoi dati coerenti, rende il filtraggio e la reportistica più accurati e previene il tipo di errori di battitura e variazioni che silenziosamente rompono aggregazioni e dashboard nel tempo.


Questa guida copre tutto, da cosa memorizza il campo e come appare nell'interfaccia, alla creazione e personalizzazione tramite Odoo Studio, moduli Python o l'API XML-RPC. Troverai anche esempi pratici da flussi di lavoro aziendali reali e un elenco di errori comuni da evitare.

Cos'è il campo di selezione in Odoo


Nell'ORM di Odoo, il campo di selezione memorizza un valore stringa scelto da un elenco fisso di opzioni. Ogni opzione è definita come una coppia chiave-valore: la chiave è ciò che viene salvato nel database e l'etichetta è ciò che l'utente vede nell'interfaccia.


Ad esempio, un campo di priorità potrebbe essere definito con le seguenti opzioni:

priority = fields.Selection([
    ('0', 'Normale'),
    ('1', 'Basso'),
    ('2', 'Alto'),
    ('3', 'Molto Alto'),
], string='Priorità', default='0')

In questo esempio, '0', '1', '2' e '3' sono le chiavi memorizzate nel database. Le etichette Normale, Basso, Alto e Molto Alto sono ciò che gli utenti vedono sullo schermo. Questa separazione è molto importante quando si tratta di cambiare le etichette in seguito senza rompere i record esistenti.


Nell'interfaccia, un campo di Selezione appare come un elenco a discesa nelle viste dei moduli. Nelle viste elenco, mostra l'etichetta leggibile dall'uomo. Quando si utilizza il widget badge, ogni opzione viene visualizzata come un'etichetta colorata, il che rende il valore immediatamente visibile nelle viste elenco dense.


In Odoo Studio, questo tipo di campo è chiamato campo Selection. Quando viene creato tramite Studio, ottiene un prefisso x_studio_. Quando viene creato tramite codice o l'API XML-RPC, si sceglie il nome tecnico.

Come funziona il campo


Nel modello di dati di Odoo, i campi di Selezione sono memorizzati in PostgreSQL come una colonna VARCHAR. Il database memorizza solo la chiave, mai l'etichetta. Questo è importante da tenere a mente quando si scrivono filtri di dominio o azioni del server, poiché è necessario utilizzare la chiave, non il valore leggibile dall'uomo.


Ad esempio, per cercare tutti i lead con alta priorità, il tuo dominio sarebbe [('priority', '=', '2')], non [('priority', '=', 'Alto')].

Attributi del Campo Chiave

Ecco le proprietà più importanti di un campo di Selezione nel framework Odoo:

  • selection: L'elenco delle tuple (chiave, etichetta) che definiscono le opzioni disponibili. Questo può anche essere un nome di metodo (stringa) che restituisce un elenco dinamicamente.
  • default: La chiave dell'opzione da utilizzare quando non è stato ancora impostato alcun valore. Se omesso, il campo inizia vuoto.
  • required: Costringe l'utente a scegliere un'opzione prima di salvare. Combinato con un valore predefinito, questo è un modello comune per i campi di stato.
  • selection_add: Utilizzato nell'ereditarietà dei moduli per aggiungere nuove opzioni a un campo di Selezione esistente senza ridefinire l'intero elenco. Questo è l'approccio corretto quando si estende un campo nativo.
  • ondelete: Funziona insieme a selection_add per definire cosa succede ai record con un'opzione eliminata quando il modulo che l'ha aggiunta viene disinstallato.

Elenco di Selezione Statico vs Dinamico

Per impostazione predefinita, l'elenco delle opzioni è definito staticamente nella dichiarazione del campo. Ma puoi anche passare un nome di metodo come stringa al parametro selection. Odoo chiamerà quel metodo durante l'esecuzione per costruire l'elenco, il che ti consente di mostrare opzioni diverse a seconda dell'utente corrente, dell'azienda corrente o di qualsiasi altro contesto.


contract_type = fields.Selection(
    selection='_get_contract_types',
    string='Tipo di Contratto'
)

def _get_contract_types(self):
    if self.env.user.has_group('hr.group_hr_manager'):
        return [('permanent', 'Permanente'), ('fixed', 'A Tempo Determinato'), ('interim', 'Interinale')]
    return [('permanent', 'Permanente'), ('fixed', 'A Tempo Determinato')]

Come Appare nelle Visualizzazioni

In una vista modulo, un campo di Selezione viene visualizzato come un normale menu a discesa. Puoi anche utilizzare l'attributo widget="badge" per visualizzarlo come un'etichetta colorata, che funziona bene nelle visualizzazioni elenco e kanban per i campi di stato. L'attributo widget="radio" visualizza le opzioni come pulsanti radio in linea, che si adatta ai campi con un numero ridotto di scelte dove desideri che tutte le opzioni siano visibili contemporaneamente.


Interazione con l'ORM di Odoo

La lettura e la scrittura dei campi di Selezione nell'ORM di Odoo funziona in modo semplice. Assegni direttamente la chiave e il framework gestisce automaticamente il mapping della visualizzazione. Quando leggi un record tramite l'API XML-RPC con fields_get, l'attributo selection del campo include l'intero elenco di coppie [chiave, etichetta], che puoi utilizzare per costruire la tua logica di visualizzazione in strumenti esterni.


Casi d'uso aziendali


Il campo di Selezione appare in praticamente ogni modulo in un'implementazione standard di Odoo. Ecco cinque esempi concreti da flussi di lavoro aziendali comuni.


CRM: Priorità del Lead e Tipo di Fase del Pipeline

Il campo di priorità sui lead CRM è un campo di Selezione nativo con quattro livelli: Normale, Basso, Alto e Molto Alto. I team di vendita lo utilizzano per concentrare la loro attenzione sulle opportunità più promettenti. Si integra direttamente nella codifica a colori della vista Kanban e può essere utilizzato in azioni automatizzate per attivare compiti di follow-up quando un lead viene escalato. Ottenere la distribuzione della priorità corretta è uno dei primi miglioramenti della qualità dei dati che la maggior parte dei team CRM realizza dopo il go-live.


Vendite: Termini di Pagamento e Politica di Fatturazione

Il campo invoice_policy sui prodotti è un campo di Selezione che controlla se la fatturazione si basa sulle quantità ordinate o sulle quantità consegnate. Questo singolo campo determina l'intero flusso di fatturazione per un prodotto. Allo stesso modo, la modalità di fatturazione sui contratti di abbonamento utilizza un campo di Selezione per distinguere tra cicli di fatturazione prepagati e postpagati. Entrambi questi esempi sono buoni esempi di campi di Selezione che hanno conseguenze significative sui flussi di lavoro finanziari.


Inventario: Stati di Qualità del Prodotto e del Lotto

Nei flussi di lavoro di produzione e controllo qualità, i campi di Selezione vengono utilizzati per tracciare lo stato dei lotti, dei numeri di serie e degli ordini di riparazione. Il campo stato dell'ordine di riparazione, ad esempio, passa attraverso valori come bozza, confermato, in riparazione, pronto e completato. Ogni transizione può attivare email automatiche, spostamenti di inventario o registrazioni contabili. Il campo di Selezione funge da punto di controllo attorno al quale è costruito l'intero flusso di lavoro.


Contabilità: Metodo di Pagamento e Tipo di Giornale

Il campo tipo di giornale nella Contabilità Odoo è un campo di Selezione che distingue tra giornali di vendita, giornali di acquisto, giornali di cassa e giornali bancari. Odoo utilizza questo valore per applicare la logica di registrazione corretta, determinare quali conti sono disponibili e limitare certe operazioni ai giusti tipi di giornale. Questo è un buon esempio di un campo di Selezione che controlla le regole aziendali piuttosto che semplicemente etichettare un record.


HR: Tipo di Impiego e Stato del Contratto

I team HR utilizzano i campi di Selezione per tracciare i tipi di impiego, gli stati dei contratti e gli stati delle richieste di congedo. Lo stato del contratto, ad esempio, passa da nuovo a aperto a scaduto o annullato. Le automazioni possono notificare il manager HR un mese prima della scadenza di un contratto, attivare elenchi di controllo per l'onboarding quando inizia un nuovo dipendente e aggiornare le regole di pagamento in base al tipo di impiego. Il campo di Selezione contiene lo stato che guida tutta questa logica.

Creare o personalizzare il campo di selezione


Ci sono tre modi principali per aggiungere un campo di Selezione a un modello Odoo, a seconda della tua configurazione e se hai bisogno che la modifica sia controllata dalla versione o applicata programmaticamente.


Utilizzando Odoo Studio (Nessun Codice)

Odoo Studio è lo strumento integrato a basso codice per aggiungere campi senza scrivere alcun Python. Per aggiungere un campo di Selezione tramite Studio:

  1. Apri Odoo Studio dal menu principale.
  2. Naviga al modulo in cui desideri il campo.
  3. Trascina un campo Selezione dalla barra laterale nel modulo.
  4. Aggiungi le tue opzioni nel pannello delle proprietà del campo, inserendo un'etichetta per ciascuna scelta.
  5. Facoltativamente imposta un valore predefinito e contrassegna il campo come obbligatorio.
  6. Salva e chiudi Studio.

Studio memorizza ogni opzione con una chiave generata automaticamente e l'etichetta fornita. Il campo riceve un prefisso x_studio_ ed è aggiunto automaticamente alla vista del modulo. Questo è l'approccio più veloce per aggiungere un campo Selezione durante una sessione di analisi aziendale con un cliente.


Utilizzando Python in un Modulo Personalizzato

Per gli sviluppatori che costruiscono moduli Odoo, i campi di Selezione sono definiti nei file modello Python. Questo è l'approccio raccomandato per le personalizzazioni che devono essere controllate in versione e distribuite su più ambienti:

from odoo import fields, models

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

    x_delivery_slot = fields.Selection([
        ('morning', 'Mattina (8h - 12h)'),
        ('afternoon', 'Pomeriggio (13h - 17h)'),
        ('evening', 'Sera (18h - 20h)'),
    ], string='Finestra di Consegna', default='morning')

Dopo aver definito il campo, lo aggiungi al file XML della vista pertinente affinché appaia nell'interfaccia. Odoo gestisce la creazione della colonna del database quando installi o aggiorni il modulo.


Quando estendi un campo nativo con nuove opzioni, utilizza selection_add invece di ridefinire il campo:

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

    state = fields.Selection(
        selection_add=[('custom_approval', 'In Attesa di Approvazione')],
        ondelete={'custom_approval': 'imposta predefinito'}
    )

Utilizzo dell'API XML-RPC

Se stai gestendo le personalizzazioni di Odoo in modo programmatico, ad esempio come parte di una pipeline di distribuzione o di un notebook di configurazione remota, puoi creare campi di selezione tramite l'API XML-RPC:

field_id = models.execute_kw(
    ODOO_DB, uid, ODOO_API_KEY,
    'ir.model.fields', 'create',
    [{
        'name': 'x_contract_category',
        'field_description': 'Categoria del Contratto',
        'model_id': model_id,
        'ttype': 'selection',
        'selection': "[('standard', 'Standard'), ('premium', 'Premium'), ('custom', 'Personalizzato')]",
        'state': 'manual',
    }]
)

Nota che quando crei un campo di selezione tramite l'API, il valore selection viene passato come rappresentazione stringa della lista Python. Il valore state: manual indica a Odoo che questo campo è stato creato manualmente, che è l'impostazione corretta per i campi creati tramite Studio o l'API. Questo è il modo in cui Dasolo gestisce la creazione remota di campi per i clienti come parte di script di configurazione automatizzati.


Migliori pratiche


1. Usa chiavi significative e stabili

La chiave è ciò che viene memorizzato nel database e utilizzato nei filtri di dominio, nelle azioni automatiche e nella logica lato server. Scegli una chiave che descriva chiaramente l'opzione e che non dovrai cambiare in seguito. Le stringhe brevi in minuscolo funzionano bene: 'draft', 'confirmed', 'cancelled'. Evita chiavi numeriche a meno che la sequenza non sia davvero importante, perché rendono il tuo codice più difficile da leggere e comprendere mesi dopo.


2. Mantieni la lista breve ed esaustiva

Un campo di selezione con più di otto o dieci opzioni è solitamente un segnale che il campo sta cercando di fare troppo. Se la lista continua a crescere, considera se una relazione Many2one con un modello di configurazione sarebbe più appropriata. Questo dà agli utenti la possibilità di gestire le opzioni stesse tramite l'interfaccia, senza richiedere a uno sviluppatore di aggiornare il codice o la definizione di un campo del database.


3. Imposta sempre un valore predefinito per i campi obbligatori

Se un campo di selezione è obbligatorio, imposta anche un valore predefinito sensato. Questo previene errori di convalida quando i record vengono creati programmaticamente, tramite importazioni o tramite l'API, dove l'utente non è presente per fare una selezione. Il valore predefinito dovrebbe rappresentare lo stato più comune o meno impegnato nel flusso di lavoro.


4. Usa selection_add quando estendi campi nativi

Se hai bisogno di aggiungere opzioni a un campo Odoo esistente in un modulo personalizzato, usa selection_add piuttosto che ridefinire l'intero campo. Questo è più sicuro e più compatibile con altri moduli che potrebbero anche estendere lo stesso campo. Abbinalo sempre al parametro ondelete per gestire cosa succede quando il tuo modulo viene disinstallato.


5. Usa il widget badge per la visibilità nelle viste elenco

Nelle viste elenco e kanban, il rendering predefinito di un campo di selezione è solo testo. Aggiungere l'attributo widget="badge" nel XML della vista trasforma ogni valore in un'etichetta colorata, rendendo il campo molto più facile da scansionare a colpo d'occhio. Questo è particolarmente utile per i campi di stato in cui gli utenti devono identificare rapidamente i record che necessitano di attenzione.


Errori comuni


Cambiare una chiave rompe i dati esistenti

L'etichetta di un'opzione di selezione può essere cambiata in modo sicuro in qualsiasi momento, poiché solo la chiave è memorizzata nel database. Tuttavia, la chiave non deve mai cambiare una volta che esistono record con quel valore. Se rinomini una chiave, tutti i record esistenti con la vecchia chiave mostreranno un valore vuoto o non valido nell'interfaccia, e eventuali filtri di dominio o automazioni che utilizzano la vecchia chiave smetteranno silenziosamente di funzionare. Se una chiave deve davvero cambiare, è necessario eseguire uno script di migrazione dei dati per aggiornare prima tutti i record esistenti.


Rimuovere un'opzione lascia record orfani

Se rimuovi un'opzione dall'elenco mentre i record detengono ancora quella chiave, quei record mostreranno un valore mancante o rotto. Prima di rimuovere qualsiasi opzione, cerca i record che la utilizzano ancora e aggiornali a un valore valido o archiviali. Questo è un problema comune durante i progetti di pulizia dei dati quando l'elenco delle opzioni è stato progettato senza un'analisi sufficiente in anticipo.


Utilizzare l'etichetta invece della chiave nei filtri di dominio

Un errore molto comune, specialmente per gli utenti meno tecnici che scrivono regole di automazione nell'interfaccia Odoo, è filtrare per l'etichetta leggibile dall'uomo piuttosto che per la chiave memorizzata. Questo produce un dominio che restituisce zero risultati senza sollevare un errore, il che può essere difficile da diagnosticare. Controlla sempre la definizione del campo per confermare quale chiave corrisponde a quale etichetta prima di scrivere un filtro.


Utilizzare un campo di selezione dove un Many2one è più appropriato

Se l'elenco delle opzioni cambia frequentemente, se gli utenti devono gestirlo da soli senza il coinvolgimento di uno sviluppatore, o se le opzioni portano attributi aggiuntivi come un colore, una sequenza o un conto collegato, allora una relazione Many2one a un modello di configurazione è la scelta migliore. I campi di selezione sono ideali per elenchi stabili gestiti dagli sviluppatori. Per qualsiasi cosa più dinamica, Many2one è più manutenibile a lungo termine.


Non gestire il valore vuoto nella logica lato server

Un campo di selezione che non è obbligatorio può contenere un valore False quando non è stata selezionata alcuna opzione. Se il tuo codice Python o l'azione automatizzata confronta il valore del campo con una stringa senza prima controllare per False, otterrai comportamenti inaspettati o errori. Gestisci sempre esplicitamente il caso vuoto nelle azioni del server e nei campi calcolati che dipendono da un campo di selezione.

Conclusione


Il campo Selection è uno di quei tipi di campo che sembra semplice ma ha una reale profondità una volta che si comprende come funziona sotto il cofano. Conoscere la differenza tra una chiave e un'etichetta, capire quando utilizzare selection_add rispetto alla ridefinizione di un campo e riconoscere quando un Many2one ti servirebbe meglio sono le distinzioni che separano un'implementazione Odoo ben progettata da una che causa problemi un anno dopo.


Che tu stia aggiungendo un tipo di contratto tramite Odoo Studio, definendo un campo di slot di consegna in un modulo Python personalizzato o creando un campo di stato di qualità tramite l'API, i modelli descritti in questa guida ti forniscono ciò di cui hai bisogno per prendere la decisione giusta per il tuo caso d'uso.

Nel modello di dati di Odoo, il campo Selection è uno dei principali strumenti per garantire la qualità dei dati alla fonte. Utilizzato bene, mantiene i tuoi record puliti, i tuoi report accurati e le tue automazioni affidabili.

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 aiutarti. Contattaci e parliamo del tuo progetto Odoo.

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