Passa al contenuto

ir.model: Guida al Model Registry di Odoo e al suo funzionamento

Guida essenziale al modello di metadati che descrive ogni modello Odoo nel sistema
11 marzo 2026 di
ir.model: Guida al Model Registry di Odoo e al suo funzionamento
Dasolo
| Ancora nessun commento

Introduzione


In Odoo, i modelli sono lo schema dei dati: definiscono quali informazioni vengono memorizzate nel database e come sono organizzate. Ogni entità con cui lavora un'azienda — clienti, ordini, fatture, articoli — è rappresentata da un modello.


Per chi lavora su Odoo, sia da un punto di vista tecnico sia funzionale, capire come funzionano i modelli è fondamentale. Sono la spina dorsale dell'architettura dei dati e determinano campi, relazioni e comportamenti applicativi.


Ma dove tiene traccia Odoo di tutti questi modelli? La risposta è ir.model: un registro interno che contiene i metadati di ogni modello presente nel sistema. Se sviluppi moduli personalizzati, esplori l'API o fai debugging, prima o poi incontrerai ir.model.

Che cos'è il modello ir.model


ir.model è il registro dei metadati di Odoo: esiste una voce per ogni modello installato. Quando dichiari un nuovo modello in Python o lo crei con Odoo Studio, viene creato o aggiornato un record in ir.model.


Questo modello fa parte del modulo base e appartiene al nucleo della piattaforma. Ogni tipo di modello Odoo — normale, astratto o transitorio — è rappresentato da un corrispondente record in ir.model (salvo le eccezioni degli astratti senza tabella DB).


La definizione di ir.model risiede nel modulo base e lavora a stretto contatto con ir.model.fields, che conserva i metadati di ogni singolo campo. Insieme permettono a Odoo di 'guardarsi dentro' e offrire funzioni di introspezione.


Gli sviluppatori consultano ir.model quando devono elencare i modelli disponibili, analizzare l'ereditarietà o costruire strumenti dinamici che operino su modelli generici. Il registro è accessibile anche via API (XML-RPC/JSON-RPC).

Campi principali del modello


Ecco i campi più rilevanti presenti in ir.model: conoscere questi attributi facilita il lavoro con il registro dei modelli e con gli strumenti di amministrazione.


1. name

Tipo: Char. Etichetta leggibile del modello; è traducibile e compare negli strumenti tecnici e nei menu di sviluppo. Serve a identificare il modello in modo umano.


2. model

Tipo: Char. Nome tecnico del modello, quello che usi nel codice Python (per esempio res.partner o sale.order). Campo obbligatorio e indicizzato per ricerche rapide.


3. info

Tipo: Text. Note descrittive o documentazione interna sul modello. Spesso è vuoto, ma utile per spiegare particolarità o scopi del modello.


4. state

Tipo: Selection. Indica l'origine del modello: base (proveniente da un modulo) o manuale (creato in Studio o dinamicamente). I modelli base sono generalmente protetti, quelli manuali più modificabili.


5. transient

Tipo: Boolean. Segna i modelli transitori: usati per dati temporanei e wizard, i loro record vengono puliti automaticamente e non servono per dati persistenti.


6. field_id

Tipo: One2many (ir.model.fields). Collezione di campi definiti per il modello: ogni record descrive un campo (nome, tipo, proprietà).


7. access_ids

Tipo: One2many (ir.model.access). Regole di accesso: quali gruppi possono creare, leggere, aggiornare o cancellare i record del modello.


8. rule_ids

Tipo: One2many (ir.rule). Regole di riga che limitano la visibilità dei record per utenti o gruppi, impiegate per la sicurezza a livello di record.


9. inherited_model_ids

Tipo: Many2many (ir.model). Elenco dei modelli da cui questo modello eredita. Quando si usa l'ereditarietà, qui vengono collegate le relazioni parentali.


10. modules

Tipo: Char. Campo calcolato che mostra i moduli che definiscono o estendono il modello. Aiuta a capire dipendenze e provenienza del modello.


11. sort

Tipo: Integer. Ordine di visualizzazione nei menu tecnici: valori più bassi compaiono prima, utile per organizzare l'elenco dei modelli.


12. constrains

Tipo: Text. Definizioni delle constraint Python (@api.constrains) associate al modello; rappresenta la logica di validazione applicativa.


13. post_constrains

Tipo: Text. Constraint eseguite dopo le validazioni principali, usate in scenari avanzati di controllo dati.


14. sql_constraints

Tipo: Text. Vincoli a livello di database (per esempio unique). Garantiscono l'integrità dei dati sul layer SQL.


15. view_ids

Tipo: One2many (ir.ui.view). Elenco delle viste correlate al modello; campo calcolato utile per la gestione dell'interfaccia.


16. record_count

Tipo: Integer. Campo calcolato che mostra quante righe esistono per quel modello; comodo per report e per avere un'idea della dimensione dei dati.


17. display_name

Tipo: Char. Rappresentazione testuale usata nelle liste e nei riferimenti, di solito una combinazione di nome e identificatore.


18. create_date

Tipo: Datetime. Data/ora di creazione del record in ir.model; gestita automaticamente dal sistema.


19. create_uid

Tipo: Many2one (res.users). Utente che ha creato l'entry; utile per audit e tracciamento.


20. write_date

Tipo: Datetime. Timestamp dell'ultima modifica; aggiornato automaticamente.


21. write_uid

Tipo: Many2one (res.users). Utente che ha eseguito l'ultima modifica; serve per controllo delle modifiche.


22. active

Tipo: Boolean. Flag per soft-delete: se impostato a False il modello è considerato archiviato o deprecato.


23. id

Tipo: Integer. Identificatore univoco del record nel database, usato nelle chiamate API e nei riferimenti interni.


24. restrict_functionality

Tipo: Boolean. Segnala funzionalità limitate in alcune edizioni di Odoo; usato per differenziare comportamenti tra Community ed Enterprise.


25. is_mail_thread

Tipo: Boolean. Indica se il modello supporta la 'chatter' (messaggi, followers) e le funzionalità di messaggistica.


26. is_mail_activity

Tipo: Boolean. Indica se il modello supporta le attività (planner, prossime azioni) e il relativo tracking.

Come questo modello entra nei processi aziendali


1. Impostazioni tecniche e configurazione

Gli amministratori consultano il menu Impostazioni tecniche per esplorare i modelli: ir.model alimenta quell'elenco mostrando nome, descrizione e numero di campi per ogni voce.


2. Gestione dei diritti di accesso

Quando si configura la sicurezza, si assegnano permessi ai gruppi. I record di access_ids su ir.model stabiliscono chi può creare, leggere, modificare o cancellare i dati di un modello.


3. Personalizzazioni con Odoo Studio

Le modellazioni fatte con Odoo Studio generano nuovi record in ir.model con state impostato a manual; la relazione field_id viene popolata con i campi personalizzati creati dall'utente.


4. Scoperta via API e integrazioni

Sistemi esterni che si integrano con Odoo possono interrogare ir.model tramite XML-RPC o JSON-RPC per scoprire dinamicamente quali modelli e campi sono disponibili, evitando di hardcodare nomi e strutture.


5. Sviluppo moduli e debugging

Durante lo sviluppo, ir.model è utile per comprendere le catene di ereditarietà (inherited_model_ids) e per ispezionare tutti i campi (field_id) definiti su un modello.

Come gli sviluppatori estendono questo modello


Gli sviluppatori di solito non estendono ir.model direttamente: il registro si aggiorna automaticamente quando si caricano moduli che definiscono nuovi modelli. Si lavora piuttosto sui modelli descritti dal registro.


Ereditarietà dei modelli

Quando nel codice Python si dichiara _inherit = 'res.partner', Odoo aggiorna il registro per collegare il nuovo modello al genitore: inherited_model_ids riflette questi legami, mantenendo la coerenza della struttura dei modelli.


Aggiunta di campi

Aggiungendo nuovi campi a un modello, Odoo crea record in ir.model.fields collegati tramite model_id. Il record ir.model esistente funge da contenitore di metadati ma non è normalmente modificato per ogni nuovo campo.


Estensioni in Python

Non è comune sovrascrivere i metodi di ir.model: essendo parte del core, le personalizzazioni si fanno estendendo i singoli modelli applicativi piuttosto che il registro stesso.


Odoo Studio

Odoo Studio si occupa automaticamente della creazione di voci in ir.model e ir.model.fields per i modelli costruiti tramite interfaccia: non serve scrivere codice. I modelli transitori vengono contrassegnati con transient; i modelli astratti, non avendo una tabella DB, non generano sempre una voce in ir.model.

Buone pratiche


  • Per integrazioni e strumenti dinamici, interrogare ir.model è la strada corretta: costruire logiche che scoprono i modelli a runtime evita dipendenze rigide e rende il sistema più resiliente.
  • Per ricerche puntuali, usa il campo model: è indicizzato e permette lookup veloci del metadata associato a un nome tecnico.
  • Prima di estendere un modello, verifica inherited_model_ids per comprendere la gerarchia di ereditarietà; intervenire senza analizzare la catena può introdurre conflitti.
  • Preferisci leggere ir.model tramite API (XML-RPC/JSON-RPC) piuttosto che modificarlo: l'accesso in lettura supporta discovery e automazione; le modifiche dirette al registro vanno evitate salvo casi molto particolari.
  • Per ispezionare i singoli campi, affidati a ir.model.fields: la relazione field_id fornisce tutti i dettagli necessari per costruire form dinamici o mappe di integrazione.

Errori comuni


  • Evitare modifiche dirette ai record di ir.model: il registro è gestito dalla piattaforma e cambi inadatti possono corrompere il sistema o essere sovrascritti dagli aggiornamenti.
  • Non confondere il record in ir.model con la classe Python del modello: il primo è un dato di registro nel DB, la seconda è l'implementazione attiva; sono collegati ma distinti.
  • Ricorda che non tutti i modelli hanno una voce in ir.model: i modelli astratti non creano tabelle DB né sempre un record nel registro.
  • Non usare il flag transient per dati permanenti: i modelli transitori sono pensati per dati temporanei e vengono puliti automaticamente dal sistema.
  • Quando interroghi ir.model, applica filtri: un'istanza Odoo può contenere centinaia di modelli, quindi cercare senza limitare il dominio restituisce risultati poco utili.

Conclusione


In sintesi: ir.model è il registro che descrive tutti i modelli di Odoo. Conoscere i suoi campi e la relazione con ir.model.fields facilita la navigazione dell'architettura dati e aiuta a prendere decisioni informate durante personalizzazioni e integrazioni.


Sia che tu stia esplorando le Impostazioni tecniche o progettando integrazioni via API, padroneggiare il concetto di ir.model ti farà risparmiare tempo ed eviterà errori evitabili.

Serve supporto per la tua implementazione Odoo?


Dasolo supporta le aziende nell'implementazione, personalizzazione e ottimizzazione di Odoo. Siamo specializzati in integrazioni API e sviluppo su Odoo, con esperienza approfondita nell'architettura dei dati e nei modelli come ir.model.


Se ti serve supporto per implementazioni Odoo, moduli personalizzati o integrazioni, possiamo aiutarti. Prenota una demo per discutere il tuo progetto.

ir.model: Guida al Model Registry di Odoo e al suo funzionamento
Dasolo 11 marzo 2026
Condividi articolo
Accedi per lasciare un commento