Passa al contenuto

Campo Correlato in Odoo: Guida Completa

Una guida pratica al campo Relazionato di Odoo: come funziona, quando usarlo e come configurarlo in Studio e Python
6 marzo 2026 di
Campo Correlato in Odoo: Guida Completa
Dasolo
| Ancora nessun commento

Introduzione


Se hai trascorso del tempo a lavorare all'interno del modello dati di Odoo, probabilmente ti sei imbattuto in situazioni in cui devi visualizzare un valore da un record collegato direttamente su un modulo, senza chiedere all'utente di cliccare su un altro modello. Il campo Relazionato è come Odoo risolve questo in modo pulito e dichiarativo.


Invece di scrivere un campo calcolato con un metodo Python, un campo Relazionato legge semplicemente attraverso una catena relazionale esistente ed espone il valore alla fine di essa. È uno degli strumenti più utili nella guida per sviluppatori di Odoo, ed è anche accessibile ai consulenti aziendali che lavorano con Odoo Studio e hanno bisogno di visualizzare informazioni contestuali senza scrivere codice.


Questa guida spiega cosa memorizza il campo Relazionato, come funziona nel framework di Odoo, come crearlo e configurarlo tramite Studio o Python, e dove si inserisce nei flussi di lavoro aziendali reali.

Cos'è il campo Relazionato in Odoo


Nell'ORM di Odoo, un campo Relazionato non è un tipo di campo distinto nello stesso modo in cui lo sono Float o Char. Invece, è un collegamento che espone un campo da un altro modello seguendo una catena di campi relazionali. Il campo Relazionato assume il tipo di qualsiasi campo a cui punta alla fine della catena.


L'esempio più semplice: un ordine di vendita ha un campo partner_id (un Many2one che punta a res.partner). Un campo Relazionato definito come related='partner_id.country_id' esporrebbe direttamente il paese del cliente sull'ordine di vendita, senza memorizzare una copia separata di esso.

Dal punto di vista dell'utente, un campo Relazionato appare esattamente come qualsiasi altro campo nella vista del modulo. Se il campo terminale nella catena è un Char, il campo Relazionato viene visualizzato come un input di testo. Se è un Many2one, viene visualizzato come un menu a discesa. Se è un Boolean, mostra una casella di controllo. Il campo Relazionato eredita la presentazione visiva del campo che rispecchia.


Per impostazione predefinita, i campi Relazionati sono sola lettura e non memorizzati nel database. Ciò significa che mostrano sempre il valore attuale dal record sorgente, ma non è possibile filtrare o cercare record utilizzandoli direttamente in un dominio a meno che non si imposti store=True.


In Odoo Studio, il campo Relazionato è disponibile quando si aggiunge un nuovo campo a un modulo. Si seleziona un percorso relazionale esistente e Studio crea il campo con la configurazione appropriata. Questo lo rende uno dei campi Odoo Studio più pratici per i consulenti che devono arricchire i moduli senza scrivere alcun Python.

Come funziona il campo


Quando Odoo legge un campo Relazionato, segue la catena di nomi dei campi separati da punti. Ogni passaggio nella catena (eccetto l'ultimo) deve essere un campo relazionale: un Many2one, One2many o Many2many. L'ultimo campo nella catena può essere di qualsiasi tipo.


Ecco un esempio semplice di un campo Relazionato definito in un modulo Python:


from odoo import fields, models

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

    partner_country_id = fields.Many2one(
        related='partner_id.country_id',
        string='Customer Country',
        store=True,
    )

In questo esempio, Odoo segue partner_id per raggiungere il record res.partner, quindi legge country_id da esso. Il risultato è un campo Many2one sull'ordine di vendita che rispecchia il paese del cliente.


Campi Relazionati Memorizzati vs. Non Memorizzati

Questa è la distinzione più importante da comprendere. Per impostazione predefinita, un campo Relazionato ha store=False, il che significa che viene calcolato al volo ogni volta che il record viene letto. Il valore non vive nella tabella del database per il modello.


Con store=True, Odoo scrive il valore nella colonna del database quando il record sorgente cambia. Questo consente di filtrare, raggruppare e cercare sul campo Relazionato, il che lo rende molto più utile per report e viste elenco.


Il compromesso è che i campi Relazionati memorizzati consumano spazio nel database e richiedono un attivatore di aggiornamento ogni volta che la sorgente cambia. Odoo gestisce questo automaticamente attraverso il suo sistema di tracciamento delle dipendenze, ma è utile esserne consapevoli per modelli sensibili alle prestazioni con molti record.


Campi Relazionati in Modalità Sola Lettura vs. Scrivibili

Per impostazione predefinita, i campi Relazionati sono in sola lettura. Aggiungere readonly=False rende il campo modificabile. Quando un utente cambia il valore, Odoo lo scrive di nuovo attraverso la catena al record sorgente. Questo è un comportamento potente ma potenzialmente sorprendente: modificare il campo Relazionato su un ordine di vendita modifica effettivamente il record del partner, non l'ordine stesso.


Utilizza i campi Relazionati scrivibili solo quando intendi veramente questo comportamento di scrittura. Può essere molto utile in alcuni contesti, come un campo di modifica rapida in una vista elenco, ma può anche portare a modifiche indesiderate dei dati se gli utenti non comprendono cosa stanno modificando.


Attributi Chiave del Campo

Questi sono i principali parametri che puoi configurare su un campo Relazionato:

  • related: La catena di nomi dei campi separati da punti (ad es., 'partner_id.country_id'). Questo è l'unico attributo obbligatorio.
  • store: Imposta su True per mantenere il valore nel database. Abilita il filtraggio e il raggruppamento.
  • readonly: Imposta su False per consentire agli utenti di modificare il campo, il che scrive attraverso alla sorgente.
  • string: L'etichetta visualizzata agli utenti. Per impostazione predefinita, corrisponde all'etichetta del campo terminale.
  • depends: Normalmente non necessario poiché Odoo deduce automaticamente le dipendenze dalla catena related. Necessario solo in casi particolari.

Come Interagisce con l'ORM di Odoo

Leggere un campo Relazionato restituisce il valore del campo terminale sul record collegato. Se qualsiasi link nella catena è vuoto (ad esempio, partner_id non è impostato), il campo Relazionato restituisce False. Questo è il comportamento standard dell'ORM di Odoo e si applica a tutti i campi relazionali nel modello di dati di Odoo.


I campi correlati sono completamente supportati in domini, viste e report quando sono memorizzati. I campi correlati non memorizzati possono essere visualizzati nelle viste di modulo e di elenco, ma non possono essere utilizzati come criteri di filtro in un dominio di ricerca a meno che il server non li valuti in Python piuttosto che in SQL.

Casi d'uso aziendali


I campi correlati appaiono in quasi ogni parte di un'implementazione Odoo. Ecco cinque esempi pratici da flussi di lavoro aziendali reali.


CRM e Vendite: Telefono del Cliente sugli Ordini di Vendita

Una richiesta comune da parte dei team di vendita è di vedere il numero di telefono del cliente direttamente nel modulo dell'ordine di vendita, senza dover aprire separatamente il record del cliente. Un campo correlato definito come related='partner_id.phone' su sale.order risolve immediatamente questo problema. Mostra il numero di telefono nel contesto, accelera le chiamate di vendita e non richiede alcuno sforzo di sviluppo aggiuntivo. In Odoo Studio, un consulente può aggiungere questo in meno di un minuto utilizzando l'opzione Campo Correlato.


Contabilità: Valuta dell'Azienda sulle Linee di Fattura

Negli ambienti Odoo multi-azienda, i contabili a volte hanno bisogno di visualizzare la valuta dell'azienda direttamente sulle linee di fattura per chiarezza nei report. Un campo correlato come related='move_id.company_id.currency_id' si collega attraverso due campi Many2one per raggiungere la valuta. Questa catena a tre livelli è valida, anche se si raccomanda generalmente di mantenere le catene brevi per motivi di prestazioni. Memorizzare questo campo consente di filtrare le fatture per valuta aziendale nei report analitici.


Inventario: Categoria del Prodotto sulle Linee di Movimento di Magazzino

I team di magazzino che gestiscono i movimenti di stock hanno spesso bisogno di vedere la categoria del prodotto senza aprire ciascun record di prodotto. Un campo correlato su stock.move.line che punta a product_id.categ_id espone direttamente la categoria sulla linea di movimento. Con store=True, questo consente di raggruppare le scorte in entrata e in uscita per categoria di prodotto nelle viste di report di Inventario, il che è particolarmente utile per le aziende che gestiscono una vasta gamma di famiglie di prodotti.


Produzione: Riferimento Interno sui Componenti dell'Ordine di Lavoro

I responsabili della produzione nelle aziende manifatturiere hanno frequentemente bisogno di vedere il riferimento interno del prodotto sulle linee dei componenti dell'ordine di lavoro durante la produzione. Un campo correlato che legge product_id.default_code sulle linee di mrp.workorder posiziona il numero di riferimento esattamente dove l'operatore ne ha bisogno, riducendo gli errori causati dalla selezione di prodotti simili. Questo tipo di piccola personalizzazione ha un impatto reale sulla precisione nel piano di produzione.


Foglio Presenze e Progetti: Dipartimento del Dipendente

Quando i project manager esaminano le linee del foglio presenze, a volte hanno bisogno di vedere a quale dipartimento appartiene il dipendente per scopi di allocazione dei costi. Un campo correlato definito come related='employee_id.department_id' su account.analytic.line (il modello del foglio presenze) visualizza direttamente il dipartimento nell'entrata del foglio presenze. Memorizzato con store=True, consente di filtrare i fogli presenze per dipartimento nei report di analisi dei progetti, rendendo Odoo uno strumento di gestione dei progetti e allocazione delle risorse più completo.

Creare o personalizzare il campo Relazionato


Ci sono tre modi principali per aggiungere un campo Relazionato a un modello Odoo, a seconda del tuo contesto tecnico e di come viene gestito il deployment.


Utilizzando Odoo Studio (Nessun Codice)

Odoo Studio ti consente di aggiungere campi Relazionati senza scrivere alcun Python. Ecco come fare:

  1. Apri Odoo Studio dal menu principale.
  2. Naviga al modulo in cui desideri aggiungere il campo.
  3. Clicca su Aggiungi un campo e scegli Campo Relazionato.
  4. Seleziona il percorso relazionale cliccando attraverso i campi disponibili passo dopo passo.
  5. Dai al campo un'etichetta e configura se deve essere memorizzato o di sola lettura.
  6. Salva e chiudi Studio.

Studio crea automaticamente il campo con un prefisso x_studio_ e lo posiziona nella vista. Questo è uno dei modi più efficienti per utilizzare i campi di Odoo Studio per aggiungere informazioni contestuali ai moduli esistenti. Non sono necessarie modifiche al database da parte tua.


Utilizzando Python in un Modulo Personalizzato

Per gli sviluppatori che lavorano sulla personalizzazione di Odoo tramite codice, i campi Relazionati sono definiti nella classe del modello. Questo è l'approccio raccomandato dalla guida per sviluppatori di Odoo per qualsiasi modifica che necessiti di controllo versione e deployment multi-ambiente:


from odoo import fields, models

class StockMoveLine(models.Model):
    _inherit = 'stock.move.line'

    product_category_id = fields.Many2one(
        related='product_id.categ_id',
        string='Product Category',
        store=True,
    )

Dopo aver definito il campo, aggiungilo alla vista XML pertinente affinché appaia nell'interfaccia. Odoo gestisce automaticamente la creazione della colonna del database durante l'installazione o l'aggiornamento del modulo. Questo è l'approccio standard di sviluppo di Odoo per una personalizzazione affidabile e manutenibile.


Utilizzando l'API XML-RPC

Per le distribuzioni gestite programmaticamente, ad esempio tramite un notebook di configurazione remota, i campi correlati possono essere creati tramite l'API XML-RPC impostando l'attributo related nella definizione del campo:

field_id = models.execute_kw(
    ODOO_DB, uid, ODOO_API_KEY,
    'ir.model.fields', 'create',
    [{
        'name': 'x_partner_country_id',
        'field_description': 'Customer Country',
        'model_id': sale_order_model_id,
        'ttype': 'many2one',
        'relation': 'res.country',
        'related': 'partner_id.country_id',
        'store': True,
        'readonly': True,
        'state': 'manual',
    }]
)

Quando crei un campo correlato tramite l'API, devi specificare manualmente il corretto ttype e relation, poiché l'API non deduce automaticamente il tipo dalla catena come fa l'ORM Python. Questo è l'approccio utilizzato da Dasolo per distribuire le personalizzazioni dei campi Odoo in remoto tramite script di configurazione automatizzati.

Migliori pratiche


1. Memorizza il campo quando è necessario filtrare o raggruppare

Se gli utenti devono filtrare una vista elenco in base al campo correlato o raggruppare i record in una tabella pivot, aggiungi store=True. Senza di esso, il filtraggio a livello di database non è possibile e Odoo dovrebbe caricare tutti i record in Python per applicare il filtro, il che non scala. Per i campi solo per visualizzazione nelle viste modulo, non memorizzati va benissimo.


2. Mantieni la catena il più corta possibile

Una catena a due livelli come partner_id.country_id è pulita e performante. Una catena a quattro livelli come picking_id.sale_id.partner_id.country_id introduce più potenziali punti di errore ed è più difficile da mantenere. Se ti trovi a costruire catene molto profonde, considera se un campo calcolato con logica Python esplicita sarebbe più chiaro e più facile da debug.


3. Comprendere cosa significa realmente readonly=False

Un campo correlato scrivibile non crea una copia locale dei dati. Modifica il record sorgente. Se rendi partner_id.phone modificabile su un ordine di vendita, cambiarlo aggiorna il record del partner in res.partner. Questa modifica influisce su ogni altro documento collegato a quel partner. Assicurati che questo sia intenzionale e informa sempre gli utenti quando un campo modifica un record condiviso.


4. Utilizzare i campi correlati per la visualizzazione, non per la duplicazione dei dati

I campi correlati sono destinati a mettere in evidenza i dati esistenti nel contesto, non a duplicarli. Se ti trovi a voler avere una copia indipendente di un valore che può divergere dalla sorgente, un campo normale con un valore predefinito impostato da un'azione onchange o automatizzata è l'approccio giusto, non un campo correlato con store=True e readonly=False.


5. Controllare le implicazioni dei diritti di accesso

Un campo correlato legge attraverso un altro modello. Se l'utente corrente non ha accesso in lettura a quel modello, il campo potrebbe restituire un valore vuoto silenziosamente. Questo è il comportamento corretto della sicurezza di Odoo, ma può confondere gli utenti che vedono un campo vuoto senza capire il motivo. Quando si progettano moduli con campi correlati, verifica che i ruoli utente previsti abbiano accesso in lettura a tutti i modelli nella catena.

Trappole comuni


Filtraggio su un campo correlato non memorizzato

Questo è l'errore più comune. Un sviluppatore o un consulente aggiunge un campo correlato a una vista elenco e poi cerca di aggiungere un filtro di ricerca su di esso. Se store=False (il predefinito), Odoo non può filtrare per questo campo a livello di database. Il dominio solleverà un errore o restituirà silenziosamente nessun risultato. Aggiungi sempre store=True a qualsiasi campo correlato che intendi utilizzare in filtri di ricerca o clausole di raggruppamento.


Comportamento di scrittura inaspettato

Impostare readonly=False su un campo correlato e poi rimanere sorpresi che le modifiche influenzano il record sorgente è un problema molto comune, soprattutto quando i campi correlati vengono aggiunti tramite Odoo Studio da utenti non familiari con i meccanismi. Prima di rendere un campo correlato modificabile, conferma sempre con gli stakeholder aziendali se desiderano che le modifiche si propagano al modello sorgente.


Non gestire i campi intermedi vuoti

Se qualsiasi campo nella catena è vuoto, il campo correlato restituisce False. In una vista modulo, questo di solito significa che il campo appare vuoto. In un campo calcolato o in un metodo Python che legge il valore del campo correlato, è necessario gestire il caso False per evitare TypeErrors. Questo è facile da trascurare nei test quando tutti i record hanno dati completi, ma si manifesta in produzione quando i campi facoltativi vengono lasciati vuoti.


Utilizzare i campi correlati dove un campo calcolato è più appropriato

I campi correlati funzionano bene quando si sta rispecchiando un singolo campo attraverso una catena relazionale. Quando è necessario applicare logica, trasformazione o comportamento condizionale sul valore, un campo calcolato con un metodo Python è la scelta giusta. Cercare di fare logica condizionale attraverso una catena di campi correlati porta a soluzioni alternative che sono difficili da mantenere e facili da rompere in futuri aggiornamenti di Odoo. Questo è un punto comune in qualsiasi tutorial tecnico di Odoo sui tipi di campo.


Problemi di prestazioni con molti campi Relazionati memorizzati su modelli di grandi dimensioni

Ogni campo Relazionato memorizzato richiede un aggiornamento quando il valore sorgente cambia. Se aggiungi dieci campi Relazionati memorizzati a un modello con centinaia di migliaia di record, e i campi sorgente si aggiornano frequentemente, puoi creare un carico di scrittura significativo sul database. Per lo sviluppo Odoo su larga scala, profila l'impatto sulle prestazioni dei campi Relazionati memorizzati e preferisci i campi solo visualizzabili non memorizzati dove l'accuratezza in tempo reale non è critica.

Conclusione


Il campo Relazionato è uno degli strumenti più pratici disponibili nel framework Odoo per far emergere informazioni contestuali senza duplicare i dati. Ti consente di leggere attraverso catene relazionali, visualizzare valori da record collegati direttamente in qualsiasi vista e, facoltativamente, memorizzare quei valori per filtraggio e reporting.


Comprendere quando utilizzare store=True, quando readonly=False è appropriato e come gestire campi intermedi vuoti ti farà risparmiare tempo e prevenire i problemi di dati più comuni nelle implementazioni Odoo. Che tu sia uno sviluppatore che scrive moduli Python, un consulente che utilizza Odoo Studio o un responsabile tecnico che gestisce configurazioni remote, il campo Relazionato è utile da conoscere bene.

Se stai costruendo o estendendo un modello di dati Odoo, i campi Relazionati appartengono al tuo toolkit insieme ai campi Calcolati, ai campi Many2one e agli altri tipi di campo Odoo trattati in questa serie.

Presso Dasolo, aiutiamo le aziende a implementare, personalizzare e ottimizzare Odoo in Vendite, Operazioni, Contabilità e oltre. Se hai bisogno di aiuto per progettare il tuo modello di dati Odoo, aggiungere campi personalizzati ai tuoi flussi di lavoro o estendere la tua configurazione Odoo con codice affidabile e manutenibile, siamo qui per aiutarti. Contattaci e discutiamo di come possiamo supportare il tuo progetto Odoo.

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