Passa al contenuto

Modello product.product: Guida all’Architettura delle Varianti in Odoo

Guida definitiva al modello varianti prodotto di Odoo per sviluppatori e consulenti funzionali
10 marzo 2026 di
Modello product.product: Guida all’Architettura delle Varianti in Odoo
Dasolo
| Ancora nessun commento

Introduzione


In Odoo i modelli definiscono la forma dei dati: come vengono salvati, collegati e recuperati dal database. Ogni elemento operativo — dall'ordine di vendita allo stock fino al singolo articolo — è memorizzato in un modello che ne regola struttura e comportamento.


Per consulenti funzionali e sviluppatori la conoscenza dei modelli è imprescindibile: sono la spina dorsale dell'architettura dati di Odoo. Capire campi, relazioni e logica incorporata significa poter configurare, estendere e integrare il sistema in modo sicuro.


In questo articolo analizziamo uno dei modelli più usati: product.product. Che tu stia creando moduli personalizzati, collegando marketplace o allestendo un catalogo, è molto probabile che dovrai interagire con questo modello.

Cos'è il modello product.product


Il modello product.product rappresenta le varianti effettive di prodotto presenti nel sistema: gli articoli concreti che si vendono o si acquistano e che compaiono nelle righe d'ordine, nei movimenti di magazzino, nelle fatture e nelle offerte.


È importante distinguere product.product da product.template: il template contiene i dati condivisi da una famiglia di prodotti, mentre product.product rappresenta ogni singola variante. Per un prodotto semplice senza varianti c'è un solo product.product collegato al template; per articoli configurabili (es. maglietta taglia/colore) ogni combinazione è una product.product distinta.


Il modello è definito nel modulo product ed è referenziato da vendite, acquisti, magazzino ed e‑commerce. Ogni volta che aggiungi una riga in un preventivo o registri un ricevimento merce, stai manipolando record di product.product.


product.product sfrutta l'ereditarietà di delega da product.template: molti campi vengono dichiarati sul template e 'ereditati' dalla variante. Questo mantiene i dati comuni centralizzati, consentendo però sovrascritture a livello di variante quando necessario.

Campi principali del modello


Di seguito trovi i campi più rilevanti su cui vale la pena focalizzarsi: conoscerli facilita la gestione delle varianti e l'integrazione con altri processi aziendali.


1. name

Tipo: Char. Nome della variante. È il valore mostrato in elenchi, form e documenti. Per prodotti semplici coincide con il nome del template; per varianti può integrare i valori degli attributi (es. "Maglietta — Blu / M").


2. product_tmpl_id

Tipo: Many2one (product.template). Collega la variante al template genitore. Ogni product.product appartiene a un unico template: questa relazione è fondamentale quando estendi o filtri i prodotti.


3. default_code

Tipo: Char. Riferimento interno o SKU. Usato per identificazione, ricerca tramite barcode e integrazioni esterne. Ogni variante può avere il proprio codice.


4. barcode

Tipo: Char. Codice a barre (EAN, UPC, ecc.). Utilizzato in POS, magazzino e inventario per scansioni rapide. Se impostato dovrebbe essere univoco tra i prodotti.


5. create_date

Tipo: Datetime. Data e ora di creazione del record. Gestito automaticamente da Odoo; utile per report e audit.


6. write_date

Tipo: Datetime. Data e ora dell'ultima modifica. Anche questo è gestito automaticamente e aiuta a tracciare gli aggiornamenti.


7. active

Tipo: Boolean. Flag di archiviazione. Se False il prodotto resta in archivio e viene escluso dalle visualizzazioni predefinite: utile per preservare la storicità senza cancellare dati.


8. type

Tipo: Selection. Tipologia prodotto: Consumabile, Servizio o Stoccabile. Influisce sul tracciamento di magazzino e sui flussi aziendali: i consumabili non sono gestiti come stock, i servizi non hanno giacenza.


9. categ_id

Tipo: Many2one (product.category). Categoria prodotto: usata per reportistica, regole di prezzo e organizzazione del catalogo. Le categorie possono avere gerarchie.


10. list_price

Tipo: Float. Prezzo di vendita di default. Visualizzato in preventivi e usato come base per le righe ordine; può essere modificato da listini o condizioni commerciali.


11. standard_price

Tipo: Float. Costo di prodotto. Serve per la valutazione di magazzino e il calcolo del margine; viene aggiornato da ordini di acquisto o manualmente.


12. uom_id

Tipo: Many2one (uom.uom). Unità di misura per vendite e giacenze: definisce come vengono rappresentate le quantità (pz, kg, lt, ecc.).


13. uom_po_id

Tipo: Many2one (uom.uom). Unità di misura per gli acquisti. Può essere diversa da uom_id (es. acquisti in scatole, vendite in pezzi) e Odoo gestisce automaticamente le conversioni.


14. description_sale

Tipo: Html. Descrizione commerciale mostrata in preventivi, ordini e fatture; può contenere formattazione e dettagli utili al cliente.


15. description_purchase

Tipo: Html. Descrizione per acquisti, visibile su ordini e fatture fornitore; utile per comunicazioni con i vendor.


16. sale_ok

Tipo: Boolean. Vendibile? Se False il prodotto non è disponibile in vendita né su e‑commerce; comodo per articoli destinati solo all'acquisto o all'uso interno.


17. purchase_ok

Tipo: Boolean. Acquistabile? Se False non compare nelle scelte d'acquisto; utile per prodotti di produzione interna o destinati solo alla vendita.


18. image_1920

Tipo: Binary. Immagine prodotto ad alta risoluzione. Odoo conserva più versioni (image_512, image_256...) usate in form, sito e documenti.


19. weight

Tipo: Float. Peso del prodotto: usato per calcolo spedizioni e logistica; l'unità dipende dalla configurazione aziendale.


20. volume

Tipo: Float. Volume del prodotto. Importante per spedizioni e capacità di magazzino, specialmente in contesti con vincoli volumetrici.


21. company_id

Tipo: Many2one (res.company). In ambienti multi‑azienda indica a quale società appartiene il prodotto, influenzando visibilità e giacenze.


22. currency_id

Tipo: Many2one (res.currency). Valuta per list_price e standard_price; tipicamente la valuta dell'azienda, con possibili conversioni tramite listini.


23. qty_available

Tipo: Float. Giacenza disponibile. Campo computato dai quants di magazzino, in sola lettura; usato per verifiche di disponibilità e report per prodotti stoccabili.


24. virtual_available

Tipo: Float. Giacenza prevista (disponibile + incoming − outgoing). Campo computato, utile per valutare bisogno di riordino.


25. product_template_attribute_value_ids

Tipo: Many2many. Collega i valori attributo che definiscono la variante (es. Colore=Blu, Taglia=M). Fondamentale per configuratori e filtri.


26. sequence

Tipo: Integer. Ordine di visualizzazione. Valori più bassi appaiono prima nelle liste e nei selettori.


27. display_name

Tipo: Char. Nome visualizzato calcolato: combina il nome con gli attributi della variante per mostrare una dicitura leggibile nelle dropdown e nei risultati di ricerca.


28. responsible_id

Tipo: Many2one (res.users). Utente responsabile del prodotto: può essere usato per regole di riordino o per responsabilità interne; campo opzionale.

Come questo modello entra nei processi aziendali


1. Vendite e preventivi

Quando un commerciale crea un preventivo sceglie una product.product dal catalogo: list_price, description_sale e uom_id vengono riportati sulla riga ordine. I listini possono sovrascrivere il prezzo e appaiono solo i prodotti con sale_ok=True.


2. Acquisti e fornitori

Ordini d'acquisto e fatture fornitore fanno riferimento a product.product: i costi d'acquisto aggiornano spesso standard_price. Solo i prodotti con purchase_ok=True sono selezionabili; uom_po_id regola l'unità d'ordine (es. scatole vs pezzi).


3. Magazzino e stock

Movimenti, prelievi e quants lavorano su product.product. qty_available e virtual_available guidano la disponibilità; solo i prodotti di tipo stoccabile sono tracciati. Il barcode accelera le operazioni di picking e controllo.


4. E‑commerce e sito

Il negozio online mostra record di product.product: varianti come taglia e colore vengono proposte come opzioni. Immagini, descrizioni e prezzi provengono dal modello; il flag sale_ok regola la visibilità pubblica.


5. Produzione e MRP

Distinte base e ordini di lavorazione fanno riferimento a product.product per componenti e finiti. Il campo type determina se un articolo è prodotto o consumato, e i livelli di magazzino influenzano la pianificazione della produzione.

Come gli sviluppatori estendono questo modello


Gli sviluppatori possono estendere product.product con diversi approcci; l'ereditarietà dei modelli di Odoo è lo strumento principale.


Ereditarietà del modello

Dichiarando _inherit = 'product.product' nel tuo modulo puoi aggiungere campi, ridefinire metodi o inserire vincoli. Tenere le modifiche in un modulo separato facilita gli aggiornamenti. Scegli product.product per dati specifici della variante, product.template per informazioni condivise dalla famiglia.


Aggiunta di campi

Definisci nuovi campi nel modello ereditato usando il tipo più adatto (Char, Many2one, Boolean, Integer, Text, Selection). Valuta se il dato appartiene al template (condiviso) o alla variante (specifico). SKU o barcodes variabili sono esempi che vanno su product.product.


Estensioni in Python

Sovrascrivi create, write o unlink per inserire logica personalizzata, ricordando di chiamare super() per non interrompere il comportamento di base. Fai attenzione a campi computati e alle loro dipendenze: product.product incorpora molti campi calcolati da moduli di stock e vendite.


Odoo Studio

Odoo Studio permette di aggiungere campi senza scrivere codice: ottimo per personalizzazioni veloci. Per logiche complesse o scenari che devono sopravvivere a upgrade, è preferibile sviluppare moduli custom. L'API di Odoo (XML‑RPC/JSON‑RPC) espone pienamente product.product per integrazioni.

Buone pratiche


  • Per integrazioni esterne mappa sempre su default_code o barcode: mantenere questi valori univoci e consistenti semplifica riconciliazioni e lookup.
  • Assicurati di impostare correttamente il campo type per ogni prodotto: Consumabile, Stoccabile o Servizio determina i flussi applicabili e gli automatismi del sistema.
  • Nelle integrazioni API usa product.product per le righe d'ordine e le transazioni; usa product.template quando l'operazione è a livello di catalogo o attributi condivisi.
  • Per campi custom usa il prefisso x_ oppure il prefisso del modulo per evitare collisioni con futuri campi nativi di Odoo.
  • Quando un campo vale per tutte le varianti (es. marca, categoria principale) è meglio posizionarlo su product.template; per dati per‑variante (es. barcode specifico) resta su product.product.

Errori frequenti


  • Evita di ereditare product.template se la logica è specifica della variante: per comportamenti per‑variante prediligi product.product.
  • Non creare record product.product manualmente se il prodotto è variante: usa il configuratore per mantenere coerenza degli attributi e delle relazioni con il template.
  • Lasciare sale_ok o purchase_ok non impostati può rendere il prodotto invisibile su vendite o acquisti: controlla questi flag quando configuri articoli.
  • Sovrascrivere metodi core senza chiamare super() rischia di rompere estensioni di terze parti o creare problemi durante gli aggiornamenti: richiama sempre la logica di base quando opportuno.
  • Usare product.product in dominio quando il filtro riguarda il template (es. categoria del catalogo) è un errore comune: valuta sempre se la condizione si applica alla variante o al template.

Conclusione


Il modello product.product è il fulcro della gestione articoli in Odoo: rappresenta gli oggetti vendibili e acquistabili. Conoscere i suoi campi e la relazione con product.template è fondamentale per configurare, personalizzare e integrare correttamente la piattaforma.


Che tu sia un consulente che mappa cataloghi o uno sviluppatore che costruisce moduli, padroneggiare product.product riduce tempi e rischi operativi.

Serve aiuto per la tua implementazione Odoo?


Dasolo affianca le aziende nell'implementazione, personalizzazione e ottimizzazione di Odoo. Siamo specialisti in integrazioni API e sviluppo Odoo, con esperienza approfondita nella struttura dati e in modelli come product.product.


Se desideri supporto per implementazioni Odoo, moduli custom o integrazioni, possiamo aiutarti a progettare e realizzare la soluzione più adatta. Prenota una demo per discutere il tuo progetto.

Modello product.product: Guida all’Architettura delle Varianti in Odoo
Dasolo 10 marzo 2026
Condividi articolo
Accedi per lasciare un commento