Passa al contenuto

Campi Domain in Odoo: Guida Completa e Pratica

Scopri come funziona il campo di tipo Domain in Odoo: dove viene utilizzato nell'interfaccia, quale ruolo svolge nel modello dati e come sfruttarlo quando crei personalizzazioni o filtri dinamici. Questo campo ti permette di definire condizioni che limitano record, guidano scelte nei campi relazionali e automatizzano comportamenti; capire dove inserirlo e come costruirne la sintassi ti aiuterà a modellare logiche di business più precise e intuitive.
6 marzo 2026 di
Campi Domain in Odoo: Guida Completa e Pratica
Dasolo
| Ancora nessun commento

Se hai già messo mano alla configurazione di Odoo avrai notato quei filtri in mezzo alle parentesi quadre: compaiono ovunque, nei pulsanti di azione, nelle regole automatiche, nelle regole di record e nei template email. Meno ovvio è che Odoo offre anche un tipo di campo specifico nell'ORM — il campo Domain — pensato per memorizzare e mostrare queste condizioni come dati strutturati, con validazione e supporto UI integrati.


Capire cosa sia e come si usa un campo Domain è utile tanto per lo sviluppatore che crea moduli personalizzati quanto per l'amministratore che costruisce flussi automatizzati. Questa guida spiega che cosa contiene un Domain, come viene valutato, esempi concreti d'uso, consigli per lo sviluppo e gli errori più comuni da evitare.

Cos'è il campo Domain in Odoo


In Odoo, un dominio è essenzialmente una lista di condizioni che filtrano i record. Ha una sintassi precisa — tuple con operatori logici — e, al momento della query, viene tradotto in una clausola WHERE sul database.

Un esempio tipico di dominio è


[('customer_rank', '>', 0), ('active', '=', True)]

che significa: restituisci tutti i record con customer_rank maggiore di 0 E con active impostato a True.


Il campo Domain (fields.Domain) è un tipo di campo dell'ORM pensato per contenere queste espressioni. Non è un semplice testo: offre validazione, serializzazione e una widget grafica che permette agli utenti di costruire filtri senza scrivere codice.


Come si presenta nell'interfaccia

Nell'interfaccia Odoo il campo Domain viene visualizzato con il widget editor di dominio. Questo fornisce un costruttore visuale: si sceglie il campo, l'operatore (uguale, contiene, maggiore di ecc.) e il valore. È la stessa UI che si usa per regole di accesso e criteri di azione automatica.


A livello di database i valori del dominio vengono salvati come testo: la rappresentazione stringa di una lista Python. Il tipo campo gestisce automaticamente la serializzazione e la validazione, così in Python lavori con valori dominio puliti mentre lo storage conserva la stringa.

Questo riflette il design del data model di Odoo: i campi non sono solo contenitori, ma definizioni che uniscono semantica, comportamento UI e logica di validazione.

Come funziona il campo


Integrazione con l'ORM e valutazione


Cosa succede sotto il cofano quando salvi e valuti un dominio:

Salvando un dominio nel database, Odoo lo immagazzina come stringa serializzata. I domini possono contenere riferimenti dinamici — per esempio la variabile speciale uid — che vengono risolti a runtime, permettendo filtri dinamici senza valori codificati a mano.

Al momento della ricerca, l'ORM prende la stringa, la valuta in modo controllato e la converte in una clausola SQL WHERE. L'operazione usa safe_eval, che supporta solo una porzione controllata di espressioni Python e le variabili specifiche di Odoo.


Il widget di editing dei domini

Per i campi fields.Domain Odoo usa di default il widget di dominio, il costru­tore visivo che si trova in molte sezioni della piattaforma. Consente di aggiungere condizioni, combinarle con AND/OR e verificare i risultati senza scrivere una riga di codice.

È questo widget che rende i domini accessibili agli utenti non tecnici: non è necessario conoscere la sintassi della lista di tuple perché l'interfaccia la compone per te.


Contesto del modello

Un campo Domain può essere collegato a un modello specifico, così l'editor sa quali campi offrire nell'elenco di scelta. Questo collegamento si realizza con l'attributo model_field. Se manca il contesto modello, il widget ricade su un campo di testo semplice, meno utile per gli utenti finali.


Questo legame tra campo e modello è fondamentale per come il framework Odoo associa la definizione dei campi al comportamento della UI: il campo conosce il modello che filtra e l'interfaccia si adatta di conseguenza.


Interazione con altri record

I Domain sono spesso usati insieme a campi relazionali: limitano le opzioni in un Many2one, definiscono l'obiettivo di un'azione automatica o delimitano l'ambito di un report. Poiché il filtro viene applicato a livello di ORM, rispetta anche le regole di sicurezza e i permessi sui campi.

Esempi pratici in azienda


Dove li trovi in azienda: cinque esempi concreti


1) Azioni automatiche e trigger email

Quando configuri un'azione automatica in Odoo definisci un dominio per specificare quali record attivano l'azione. Per esempio, una mail per fatture scadute può mirare solo alle fatture pubblicate, non pagate e oltre la data di scadenza. Quel dominio viene memorizzato nel modello base.automation nel campo Domain filter_domain, e l'azione si attiva solo sui record che lo soddisfano.


2) Regole di record e controllo accessi

Le regole di sicurezza si basano su domini per limitare quali record un gruppo può vedere o modificare. Una regola per il team vendite potrebbe mostrare solo i record assegnati al team dell'utente corrente: questo fornisce sicurezza a livello di riga senza scrivere codice personalizzato. Ogni filtro di ogni rule è un'espressione dominio salvata su un campo Domain.


3) Filtri in magazzino e operazioni

Nel magazzino i domini servono a indirizzare azioni pianificate o regole di riordino verso categorie di prodotto, location o livelli di stock specifici. Un riordino automatico può essere limitato ai prodotti stoccabili con quantità sotto il punto di riordino, evitando di processare migliaia di record inutilmente.


4) Pipeline CRM e qualificazione lead

In CRM i domini classificano i lead, automatizzano spostamenti di fase e assegnazioni. Regole di assegnazione possono abbinare lead al commerciale giusto in base a Paese, settore o dimensione dell'affare. Il campo Domain permette di configurare queste logiche dall'interfaccia senza cambiare codice per ogni nuovo criterio.


5) Dropdown Many2one dinamici

In form personalizzati un dominio su un campo Many2one controlla quali record compaiono nella lista. Limitare un campo fornitore a soli supplier attivi con rank > 0 migliora l'usabilità e riduce errori. I domini possono essere dinamici, leggendosi ad altri campi del form e aggiornando le opzioni in base alle scelte dell'utente.

Creare o personalizzare il campo


Due strade per usarli: Studio o sviluppo


Usare Odoo Studio

Odoo Studio non espone attualmente un tipo Domain separato nella creazione visuale di campi. Nella maggior parte dei casi non è necessario: gli editor di dominio già presenti per azioni automatiche, regole di record e server action offrono il costruttore visuale senza creare un campo personalizzato.

Per aggiungere un filtro a un Many2one in Studio puoi modificare le proprietà del campo e inserire direttamente un'espressione dominio: Studio verifica la sintassi e salva il dominio nella vista.


Personalizzazione tecnica in Python

In un modulo custom aggiungere un campo Domain è semplice e rientra nelle pratiche standard di sviluppo Odoo. Di seguito uno schema pratico che mostra come collegare il campo al modello da filtrare:

from odoo import models, fields

class MyModel(models.Model):
    _name = 'my.model'

    model_name = fields.Char(default='res.partner')
    filter_domain = fields.Domain(
        string='Filter Domain',
        model_field='model_name',
        help='Domain expression to filter partner records'
    )

L'attributo model_field punta al campo che contiene il nome del modello. In questo modo il widget sa quali campi proporre nel builder. Tenere il nome modello separato permette anche scelte dinamiche di modello quando serve.


Mostrare il widget in una vista form

Per esporre il costruttore di domini in una vista form, inserisci sia il campo che il riferimento al modello nel XML della vista:


<field name="model_name" invisible="1"/>
<field name="filter_domain" widget="domain"
       options="{'model': 'model_name'}"/>

Senza la dichiarazione widget="domain" e l'opzione model, il campo viene reso come testo semplice. Ricorda sempre di includere entrambi quando rendi il dominio configurabile dagli utenti.


Scrivere valori domain via API XML-RPC

Se imposti domini tramite API, passa sempre il valore come stringa:

models.execute_kw(db, uid, api_key, 'my.model', 'write',
    [[record_id], {
        'filter_domain': "[('active', '=', True)]"
    }]
)

Inviare una lista Python anziché la stringa è un errore comune che può causare eccezioni o fallimenti silenziosi a seconda della versione di Odoo. Serializza sempre il dominio in stringa prima di scriverlo via API.

Buone pratiche


Piccole abitudini che ti evitano grandi problemi


Valida la sintassi prima di distribuire

Un dominio invalido genera errori al momento della valutazione. Prova i tuoi domini nella barra di ricerca di Odoo o in modalità sviluppatore, oppure fai una chiamata search_count via API per verificare che restituiscano il numero di record atteso prima di salvarli su azioni o regole.


Usa variabili dinamiche quando possibile

Non hardcodare ID utente, ID azienda o date nelle espressioni. Preferisci variabili dinamiche come uid, context_today() o current_company_id. In questo modo i domini restano portabili e non si rompono al trasferimento tra ambienti o quando cambiano i record.


Associa sempre il contesto modello

Quando aggiungi un Domain a un modello custom imposta sempre model_field e includilo nella vista. Senza questo collegamento gli utenti vedranno un campo di testo invece del builder visuale, con minore usabilità e più probabilità di salvare valori non validi.


Mantieni i domini leggibili

Domini molto nidificati con | (OR) e & (AND) diventano difficili da mantenere. Commenta il codice Python con l'intento del filtro. Se un dominio si complica troppo, valuta una server action o un campo computato più chiari e più facili da testare.


Usa safe_eval per valutazioni programmatiche

Quando devi valutare stringhe dominio in Python (es. in server action), usa safe_eval di Odoo invece di eval. È più sicuro, gestisce le variabili di contesto di Odoo e replica il comportamento interno della piattaforma.


Testa con dati realistici

Verifica sempre che un dominio corrisponda ai record attesi prima di metterlo in produzione. Questo vale soprattutto per azioni automatiche e regole di accesso: un filtro sbagliato può processare i record sbagliati o bloccare l'accesso agli utenti senza avvisi evidenti.

Errori frequenti


Errori ricorrenti e come evitarli


Confondere il tipo campo con la sintassi del dominio

In Odoo “domain” indica due cose: la sintassi del filtro (lista di tuple) e il tipo di campo fields.Domain che memorizza quella sintassi. Spesso chi inizia confonde il contenitore con il contenuto: il campo Domain è la scatola, il dominio è la logica dentro la scatola.


Passare una lista invece della stringa via API

Quando scrivi su un campo Domain tramite XML-RPC, devi inviare una stringa. Inviare la lista Python può produrre errori o fallimenti silenziosi. Serializza sempre il dominio in stringa prima dell'invio.


Dimenticare il contesto modello nel widget

Se inserisci il campo Domain in una vista ma non specifichi l'opzione model, il widget non mostrerà il costruttore visuale ma solo un campo testo. Il builder appare solo quando sa quale modello deve consultare: includi sempre il link model_field nella vista.


Hardcodare ID di record nei domini

Riferirsi direttamente a ID di record nei domini porta a rotture silenziose quando quei record vengono cancellati o la configurazione viene copiata in un altro DB. Usa riferimenti dinamici come uid o lookup relazionali per mantenere i domini portabili.


Regole di record troppo larghe o troppo restrittive

Una regola di record troppo permissiva espone dati a utenti non autorizzati; una troppo restrittiva nasconde record senza spiegazioni. Testa sempre le rule dal punto di vista dell'utente target, non dall'admin che aggira i controlli.


Dimenticare i record archiviati

Per default Odoo esclude i record archiviati (active = False) dalle ricerche. Se il tuo dominio non lo considera potresti vedere risultati mancanti. Includi ('active', 'in', [True, False]) quando vuoi considerare anche gli archiviati.

Conclusione


I campi Domain sono mattoni fondamentali che alimentano molte funzioni di Odoo. Dalla sicurezza alle azioni automatiche, dai dropdown dinamici ai filtri delle dashboard, i domini stanno alla base del filtraggio dei record. Il tipo fields.Domain offre a sviluppatori e amministratori un modo validato e chiaro per memorizzare e presentare queste regole direttamente nel modello dati di Odoo.


Per l'utente business il widget rende la configurazione dei filtri possibile senza codice. Per lo sviluppatore il tipo Domain sostituisce vecchie soluzioni basate su Char con widget custom, rendendo le definizioni di modello più limpide. Che tu lavori con Odoo Studio, sviluppi moduli Python o costruisca flussi automatizzati dall'interfaccia, conoscere i Domain apre molte opportunità.


I concetti esposti valgono attraverso le versioni e i moduli di Odoo. Investire tempo per comprendere i campi Domain ripaga, perché sono davvero onnipresenti nella piattaforma.


Hai bisogno di supporto per il tuo progetto Odoo?

Dasolo affianca le aziende nell'implementazione, personalizzazione e ottimizzazione di Odoo per processi specifici. Che si tratti di impostare workflow automatici, sviluppare moduli su misura o migliorare un'installazione esistente, il nostro team ha competenze tecniche per guidarti con sicurezza.

Se hai dubbi sui campi Domain o su altri aspetti della tua implementazione Odoo, contattaci. Siamo disponibili a esaminare la tua configurazione e suggerirti la direzione migliore.

Campi Domain in Odoo: Guida Completa e Pratica
Dasolo 6 marzo 2026
Condividi articolo
Accedi per lasciare un commento