Passa al contenuto

Related Field in Odoo: Guida Completa per Sviluppatori e Amministratori

Guida pratica al campo Related di Odoo: cosa fa, quando conviene usarlo e come impostarlo sia con Studio che via codice Python
6 marzo 2026 di
Related Field in Odoo: Guida Completa per Sviluppatori e Amministratori
Dasolo
| Ancora nessun commento

Introduzione


Se hai lavorato con il modello dati di Odoo, ti sarà capitato di voler mostrare sul modulo un'informazione che vive su un altro record, senza obbligare l'utente ad aprire quella scheda. Il campo Related è lo strumento pensato proprio per questo: permette di esporre valori collegati in modo semplice e dichiarativo.


Invece di scrivere una funzione Python per calcolare un valore, il campo Related percorre una catena di relazioni e prende il valore finale. È una delle soluzioni più pratiche per sviluppatori e consulenti che usano Odoo Studio quando serve visualizzare informazioni contestuali senza codice.


Questa guida illustra cosa rappresenta un campo Related, il suo comportamento nel framework di Odoo, come crearlo sia con Studio sia tramite codice Python, e dove trova applicazione nei flussi aziendali reali.

Che cos'è il campo Related in Odoo


Nel sistema ORM di Odoo il campo Related non è un nuovo tipo di dato alla stregua di Float o Char: è piuttosto un collegamento che espone un campo presente in un altro modello. Il tipo visualizzato dal campo Related coincide con il tipo del campo terminale della catena relazionale.


Un esempio semplice: su un ordine di vendita esiste il campo partner_id (Many2one verso res.partner). Un Related impostato come related='partner_id.country_id' mostra direttamente il paese del cliente sull'ordine, senza creare una seconda copia del dato.

Per l'utente il campo Related si comporta come qualsiasi altro campo nella vista: se il campo terminale è un Char verrà visualizzato come testo, se è un Many2one apparirà come selettore, se è Boolean come checkbox. L'aspetto ereditato riflette il tipo del campo di origine.


Per impostazione predefinita i campi Related sono di sola lettura e non memorizzati nel database. Questo significa che riportano sempre il valore corrente dalla sorgente, ma non possono essere usati per filtrare o cercare a livello di database a meno che non si abiliti store=True.


In Odoo Studio il campo Related è disponibile quando aggiungi un nuovo campo al modulo: scegli il percorso relazionale e Studio crea il campo con la configurazione corretta. È quindi uno strumento pratico per i consulenti che devono arricchire le schede senza intervenire in Python.

Come funziona il campo Related


Quando Odoo legge un campo Related segue il percorso indicato con i punti. Ogni tappa intermedia deve essere una relazione (Many2one, One2many o Many2many); solo il campo finale può essere di qualsiasi tipo.


Di seguito un esempio concreto di definizione di un campo Related 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 caso Odoo segue partner_id fino al record res.partner e legge country_id: il risultato è un Many2one sull'ordine di vendita che riflette il paese del cliente.


Campi Related memorizzati vs non memorizzati

Questa è la distinzione più importante. Per default un campo Related ha store=False e viene calcolato al volo ogni volta che si legge il record; il valore non risiede nella tabella del modello.


Con store=True Odoo salva il valore in una colonna del database quando cambia la sorgente. Questo permette di filtrare, raggruppare e cercare sul campo Related, rendendolo utile per report e viste elenco.


Lo svantaggio è che i campi Related memorizzati occupano spazio e generano scritture di aggiornamento quando la sorgente cambia. Odoo gestisce gli aggiornamenti tramite il suo sistema di dipendenze, ma è un aspetto da considerare per modelli con grandi volumi di record e esigenze di performance.


Campi Related di sola lettura vs scrivibili

Per default i Related sono read-only. Impostando readonly=False il campo diventa editabile e, quando l'utente modifica il valore, Odoo lo scrive attraverso la catena fino al record sorgente. Questo comportamento è potente ma può sorprendere: modificare il campo su un ordine potrebbe aggiornare il record partner, non l'ordine stesso.


Usa i Related scrivibili solo se vuoi davvero la scrittura diretta sulla sorgente. Possono essere comodi in alcuni contesti (es. modifica rapida da vista elenco), ma rischiano di causare cambiamenti indesiderati se gli utenti non sanno cosa stanno editando.


Attributi principali del campo

Ecco i parametri principali che configuri su un campo Related:

  • related: la catena di nomi separati da punti (es. 'partner_id.country_id'). È l'attributo obbligatorio.
  • store: impostalo a True per persistere il valore nel database. Abilita filtri e raggruppamenti.
  • readonly: impostalo a False per rendere il campo modificabile, con scrittura verso la sorgente.
  • string: l'etichetta mostrata all'utente. Di default prende l'etichetta del campo terminale.
  • depends: normalmente non serve perché Odoo deduce le dipendenze dalla catena related; utile solo in casi particolari.

Interazione con l'ORM di Odoo

Leggere un campo Related restituisce il valore del campo terminale sul record collegato. Se una tappa della catena è vuota (ad esempio partner_id non valorizzato), il Related restituisce False. Questo è comportamento standard dell'ORM e vale per tutte le relazioni.


I Related sono pienamente utilizzabili in domini, viste e report quando sono memorizzati. Se non sono memorizzati possono essere mostrati in form e list, ma non possono essere usati come criterio di ricerca nei domini SQL a meno che il server non li valuti in Python.

Casi d'uso aziendali


I campi Related si incontrano quasi ovunque in un'implementazione Odoo. Ecco cinque esempi pratici tratti da scenari aziendali concreti.


CRM e Vendite: telefono cliente sugli ordini

Spesso il commerciale vuole vedere il numero di telefono del cliente direttamente sull'ordine di vendita, senza aprire la scheda partner. Un Related related='partner_id.phone' sull'order risolve il problema: il numero appare nel contesto dell'ordine, accelera le chiamate e si configura in pochi click con Odoo Studio.


Contabilità: valuta della società sulle righe fattura

In ambienti multi-company gli addetti contabili possono aver bisogno di visualizzare la valuta della società direttamente sulle righe di fattura per chiarezza di report. Un Related come related='move_id.company_id.currency_id' attraversa due Many2one per raggiungere la valuta. Catene di due o tre livelli sono valide, ma catene troppo lunghe possono impattare la manutenibilità; memorizzandolo si possono poi filtrare le fatture per valuta nei report analitici.


Magazzino: categoria prodotto sulle righe di movimento

I magazzinieri hanno spesso necessità di vedere la categoria del prodotto sulle righe di movimento senza aprire la scheda prodotto. Un Related su stock.move.line che punti a product_id.categ_id mostra la categoria in linea. Con store=True è possibile raggruppare i movimenti per categoria nei report di inventario, utile per aziende con famiglie di prodotto numerose.


Produzione: codice interno sulle componenti del lavoro

In produzione i responsabili vogliono vedere il codice interno del prodotto sulle righe dei componenti in ordine di lavoro per evitare errori di selezione. Un Related che legge product_id.default_code sulle righe di mrp.workorder mette il riferimento dove serve all'operatore, riducendo scambi errati tra prodotti simili.


Timesheet e Progetti: reparto del dipendente

Quando i project manager analizzano le timbrature, bisogna spesso sapere il reparto dell'impiegato per allocare i costi. Un Related related='employee_id.department_id' su account.analytic.line (modello timesheet) mostra il reparto direttamente sulla riga. Se memorizzato consente di filtrare le timbrature per reparto nei report di progetto.

Creare o personalizzare un campo Related


Ci sono tre modi principali per aggiungere un campo Related a un modello Odoo, a seconda del contesto tecnico e della gestione del deployment.


Usare Odoo Studio (senza codice)

Odoo Studio permette di aggiungere campi Related senza scrivere Python. Procedura in breve:

  1. Apri Odoo Studio dal menu principale.
  2. Vai al form dove vuoi aggiungere il campo.
  3. Clicca su Aggiungi campo e scegli Related Field.
  4. Seleziona il percorso relazionale cliccando passo passo i campi disponibili.
  5. Assegna un'etichetta e decidi se memorizzarlo o renderlo di sola lettura.
  6. Salva e chiudi Studio.

Studio crea automaticamente il campo con prefisso x_studio_ e lo inserisce nella vista: è il modo più rapido per arricchire moduli con informazioni contestuali senza modifiche esplicite al database da parte tua.


Usare Python in un modulo personalizzato

Per chi sviluppa personalizzazioni via codice, i Related si dichiarano nella classe del modello: questo è il metodo consigliato quando serve versioning e distribuzione controllata tra ambienti.


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, va aggiunto alla vista XML per renderlo visibile. Durante l'installazione o l'upgrade del modulo Odoo crea automaticamente la colonna in database: questo garantisce personalizzazioni affidabili e manutenibili.


Usare l'API XML-RPC

In contesti gestiti programmaticamente (ad es. deployment automatizzati), è possibile creare campi Related via 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 Related tramite API devi specificare manualmente ttype e relation, perché l'API non inferisce automaticamente il tipo dalla catena come fa l'ORM Python. Questo approccio è utile per chi gestisce configurazioni remote e deploy automatizzati.

Buone pratiche


1. Memorizza il campo quando serve filtrare o raggruppare

Se gli utenti devono filtrare una lista o raggruppare per quel campo, imposta store=True. Senza memorizzazione il filtro a livello database non è possibile e Odoo dovrebbe valutare record in Python, cosa che non scala. Se il campo serve solo per visualizzazione nel form, non memorizzarlo va benissimo.


2. Mantieni la catena il più corta possibile

Una catena a due livelli come partner_id.country_id è efficiente e semplice. Catene molto lunghe aumentano i punti di rottura e la complessità. Se ti trovi a costruire percorsi profondi, valuta un field calcolato (computed) con logica Python più chiara e debuggabile.


3. Comprendi davvero cosa implica readonly=False

Un Related scrivibile non crea una copia locale: modifica il record sorgente. Rendendo editabile partner_id.phone sull'ordine, una modifica aggiorna il partner in res.partner e avrà effetto su tutti i documenti collegati. Assicurati che sia intenzionale e informa gli utenti quando stanno editando dati condivisi.


4. Usa i Related per mostrare, non per duplicare dati

I Related servono a portare dati esistenti nel contesto, non a crearne copie indipendenti. Se vuoi una copia che possa divergere dalla sorgente, usa un campo standard popolato da onchange o da un'azione automatica, non un Related con store=True e readonly=False.


5. Verifica i diritti di accesso

Un Related legge dati su altri modelli: se l'utente non ha permessi di lettura su uno dei modelli nella catena, il campo può risultare vuoto senza avvisi. Questo è comportamento corretto dell'ACL di Odoo, ma può confondere: assicurati che i ruoli attesi abbiano accesso a tutti i modelli coinvolti.

Errori comuni


Filtrare su un Related non memorizzato

Questo è l'errore più comune. Si aggiunge un Related alla vista elenco e poi si prova a usarlo come criterio di ricerca. Con store=False Odoo non può eseguire il filtro a livello SQL: la query fallirà o non restituirà risultati. Metti store=True su ogni Related che vuoi usare in filtri o group-by.


Comportamento di scrittura inatteso

Impostare readonly=False su un Related e restare sorpresi perché la modifica aggiorna la sorgente è un problema frequente, soprattutto quando i campi vengono creati con Studio da utenti non tecnici. Prima di rendere editabile un Related, confrontati con gli stakeholder per evitare propagation di modifiche non volute.


Non gestire campi intermedi vuoti

Se una tappa della catena è vuota, il Related restituisce False e in una vista appare come campo vuoto. In un metodo Python che legge il Related devi gestire il caso False per evitare TypeError. Spesso nei test i dati sono completi e il problema emerge solo in produzione quando i campi opzionali restano vuoti.


Usare Related quando serve un campo Computed

I Related sono ideali per copiare un singolo campo attraverso una relazione. Se serve applicare logiche, trasformazioni o condizioni, meglio un campo computed con metodo Python. Forzare logiche su una catena Related genera soluzioni fragili e difficili da mantenere durante gli upgrade.


Problemi di performance con molti Related memorizzati su modelli grandi

Ogni Related memorizzato richiede aggiornamenti quando la sorgente cambia. Se aggiungi molti Related memorizzati su un modello con centinaia di migliaia di record e i campi sorgente cambiano spesso, puoi sovraccaricare il database. Per sviluppi su larga scala misura l'impatto e preferisci campi non memorizzati quando la precisione in tempo reale non è critica.

Conclusione


Il campo Related è uno degli strumenti più pratici in Odoo per mostrare informazioni contestuali senza duplicare i dati. Permette di leggere attraverso catene relazionali, esporre valori da record collegati in qualsiasi vista e, se necessario, memorizzarli per reporting e filtri.


Capire quando usare store=True, quando rendere il campo modificabile e come gestire campi intermedi vuoti ti farà risparmiare tempo ed evitare i problemi più comuni nelle implementazioni Odoo. Sia che tu sia sviluppatore, consulente Studio o responsabile tecnico di deployment, il Related merita di essere nel tuo arsenale.

Se stai costruendo o estendendo un modello dati in Odoo, i campi Related devono entrare nella tua cassetta degli attrezzi assieme ai campi computed, Many2one e agli altri tipi fondamentali trattati in questa serie.

Da Dasolo aiutiamo le aziende a implementare, personalizzare e ottimizzare Odoo nelle aree Sales, Operations, Accounting e oltre. Se ti serve supporto per il design del data model, l'aggiunta di campi personalizzati o l'estensione del tuo Odoo con codice affidabile e manutenibile, possiamo aiutarti. Contattaci e parliamo di come possiamo supportare il tuo progetto Odoo.

Related Field in Odoo: Guida Completa per Sviluppatori e Amministratori
Dasolo 6 marzo 2026
Condividi articolo
Accedi per lasciare un commento