Introduzione
Se hai mai inserito la quantità in un ordine, segnato i giorni aperti di una attività o assegnato un punteggio di priorità a un lead, hai già usato un campo Integer in Odoo. È uno dei tipi di campo più diffusi nel modello dati eppure spesso viene dato per scontato.
Capire il comportamento del campo Integer è importante sia per chi costruisce moduli e maschere senza codice, sia per chi sviluppa moduli personalizzati, sia per i consulenti che progettano strutture dati adatte alle esigenze del cliente.
Questa guida spiega cosa conserva un campo Integer, come si comporta nell'interfaccia e nell'ORM di Odoo, come crearlo tramite Studio o codice Python, e presenta esempi pratici e avvertimenti da tenere a mente.
Cos'è il campo Integer in Odoo
Nel cuore dell'ORM Odoo, un campo Integer è pensato per numeri interi: niente decimali, niente frazioni. A livello database corrisponde a una colonna di tipo INTEGER in PostgreSQL, un intero a 4 byte che copre valori nell'ordine dei miliardi negativi e positivi.
Per l'utente si presenta come una casella numerica nei form e come una colonna numerica nelle viste elenco. È la scelta corretta quando il valore ha senso solo in unità intere: quantità, punteggi, giorni, numeri di sequenza o qualsiasi metrica che non ammette mezzi.
Esempio di definizione in un modulo Python:
from odoo import fields, models
class ProjectTask(models.Model):
_inherit = 'project.task'
estimated_hours = fields.Integer(
string='Estimated Hours',
default=0,
)
Il parametro string definisce l'etichetta visibile nell'interfaccia; default imposta il valore automatico quando viene creato un nuovo record.
In Odoo Studio il tipo è semplicemente chiamato Integer. I campi creati tramite Studio ricevono automaticamente il prefisso x_studio_, mentre se lo definisci in Python o via API scegli tu il nome tecnico.
Come funziona il campo
Quando dichiari un campo Integer, Odoo crea la colonna corrispondente nel database al momento dell'installazione o dell'aggiornamento del modulo: non servono migrazioni SQL manuali.
A livello database la colonna è INTEGER. L'ORM di Odoo si occupa della conversione dei tipi: se l'utente non immette valore, il campo restituisce 0 anziché None o False. Questa caratteristica lo distingue da altri tipi come Float o Char, che possono restituire False se vuoti.
Attributi chiave del campo
Le proprietà principali che puoi configurare su un campo Integer sono le seguenti:
- string: L'etichetta mostrata agli utenti nell'interfaccia.
- default: Valore assegnato automaticamente ai nuovi record. Se non specificato, il valore predefinito è
0. - required: Rende il campo obbligatorio. Poiché il default è
0, serve soprattutto se vuoi impedire il salvataggio quando il valore è zero. - readonly: Impedisce agli utenti di modificare il valore dall'interfaccia.
- index: Crea un indice PostgreSQL sulla colonna, accelerando filtri e ricerche su quel campo.
- compute: Collega una funzione Python che calcola dinamicamente il valore del campo a partire da altri campi.
- store: Usato con
compute, decide se il valore calcolato viene memorizzato nel database o ricalcolato al volo. - copy: Definisce se il valore deve essere duplicato quando si duplica il record.
- groups: Limita la visibilità del campo a determinati gruppi di utenti.
Come appare nelle viste
Nei form un campo Integer è una casella di input numerica. Per numeri grandi Odoo applica separatori delle migliaia per migliorarne la leggibilità.
Nelle liste gli Integer sono mostrati come numeri semplici, allineati a destra per convenzione. Nelle ricerche supportano filtri come uguale, maggiore o minore.
È possibile abbinare widget per modificarne la resa: il widget priority trasforma il numero in stelle cliccabili, mentre progressbar visualizza il valore come barra di avanzamento quando è presente un limite massimo.
Interazione con l'ORM di Odoo
Per chi sviluppa leggere e scrivere campi Integer è diretto: il valore è sempre un int Python. Poiché i campi vuoti tornano 0, attenzione alle condizioni che vogliono distinguere "assenza" da "zero": senza una logica aggiuntiva i due casi sono indistinguibili.
Gli Integer funzionano bene nelle computed fields e nei domini usati in viste, azioni server e automazioni nell'intero ecosistema Odoo.
Casi d'uso aziendali
Il campo Integer ricorre in quasi tutti i moduli Odoo. Di seguito cinque scenari pratici dove è centrale.
1. CRM: punteggio lead
Le vendite spesso assegnano un punteggio ai lead per priorizzarli. Puoi aggiungere un campo Integer chiamato "Lead Score" sul modello opportunità: può essere compilato manualmente dai venditori o calcolato automaticamente in base a criteri come dimensione aziendale, budget o interazioni.
Così è semplice ordinare la pipeline per punteggio e concentrarsi sulle opportunità più promettenti.
2. Vendite: quantità minima d'ordine
Nei moduli Vendite e Magazzino gli Integer servono a definire quantità minime d'ordine su prodotti o listini. Impostare un minimo di 10 unità evita ordini inferiori a soglia, riducendo il lavoro di gestione con i clienti.
3. Magazzino: regole di riordino
Le regole di riordino si basano su campi Integer per soglie minime e massime. Quando lo stock scende sotto il minimo, Odoo genera automaticamente un ordine di rifornimento fino al massimo impostato. Valori corretti sono fondamentali per prevenire sia stockout sia accumulo eccessivo.
4. Project Management: story points e stime
Nei progetti agili spesso si aggiungono Integer personalizzati per story points o ore stimate. Il campo compare nelle schede attività e aiuta a monitorare capacità e velocità del team durante gli sprint.
5. Contabilità: giorni di pagamento
I termini di pagamento in contabilità utilizzano Integer per definire i giorni concessi. Net 30 o Net 60 sono semplicemente valori interi che influiscono sul calcolo delle scadenze delle fatture, quindi è importante impostarli correttamente per gestire il cash flow.
Creare o personalizzare un campo Integer
Aggiungere un campo Integer a un modello può avvenire in due modi principali: con Odoo Studio senza scrivere codice, o tramite definizione Python per personalizzazioni più avanzate.
Con Odoo Studio
Odoo Studio è lo strumento low-code integrato per personalizzare campi e viste. Per aggiungere un Integer con Studio:
- Apri il form dove vuoi inserire il campo.
- Attiva Studio dal menu in alto a destra.
- Dalla lista dei campi a sinistra trascina il tipo Integer sulla form.
- Configura etichetta, obbligatorietà e valore predefinito.
- Salva ed esci da Studio.
Studio crea il campo con prefisso x_studio_ e registra la definizione in ir.model.fields. Il campo è subito disponibile in form e viste elenco.
Con Python (customizzazione tecnica)
Per sviluppatori che costruiscono moduli personalizzati, il campo Integer si dichiara nella classe del modello Python:
from odoo import fields, models
class CrmLead(models.Model):
_inherit = 'crm.lead'
x_lead_score = fields.Integer(
string='Lead Score',
default=0,
index=True,
help='Score from 0 to 100 used to prioritize opportunities',
)
Dopo aver definito il campo in codice, esegui odoo-bin -u your_module per applicare le modifiche: la colonna viene creata automaticamente.
Via XML-RPC API
È possibile anche creare un campo Integer da remoto con l'API XML-RPC di Odoo: utile per deployment automatizzati o quando non si ha accesso diretto al server.
field_id = models.execute_kw(
ODOO_DB, uid, ODOO_API_KEY,
'ir.model.fields', 'create',
[{
'name': 'x_lead_score',
'field_description': 'Lead Score',
'model_id': crm_lead_model_id,
'ttype': 'integer',
'state': 'manual',
}]
)
Il ttype per Integer è 'integer' e lo state deve essere 'manual' per indicare che si tratta di un campo creato dall'utente.
Campi Integer computati
I campi Integer calcolati sono utili per ottenere valori automaticamente, ad esempio contare le attività aperte di un progetto:
class Project(models.Model):
_inherit = 'project.project'
open_task_count = fields.Integer(
string='Open Tasks',
compute='_compute_open_task_count',
store=True,
)
def _compute_open_task_count(self):
for project in self:
project.open_task_count = self.env['project.task'].search_count([
('project_id', '=', project.id),
('stage_id.fold', '=', False),
])
Impostare store=True salva il valore nel database, rendendolo utilizzabile per filtri e ordinamenti senza ricalcolo continuo.
Buone pratiche
Consigli pratici per sfruttare al meglio i campi Integer in Odoo.
Usa Integer per conteggi e quantità intere
Scegli Integer quando il valore deve essere sempre intero. Per valori frazionari o monetari usa rispettivamente Float o Monetary: usare Integer al posto giusto evita perdita di precisione e comportamenti inattesi.
Imposta un default sensato
Il default è 0, ma valuta se lo zero ha senso nella tua logica di business. Se zero indica "non impostato", potresti voler aggiungere un Boolean di controllo o prevedere una gestione specifica in fase di validazione.
Aggiungi un indice se filtri spesso quel campo
Se prevedi di filtrare, ordinare o raggruppare per quel campo, aggiungi index=True. L'indice migliora le performance su grandi volumi a fronte di un piccolo costo in spazio e scritture.
Usa store=True per campi computed che servono nei filtri
Se una computed field deve essere filtrabile o raggruppabile, imposta sempre store=True. Senza di esso Odoo non può usarla nei domini o nei group-by.
Documenta i range
Quando il campo ha un range significativo (es. punteggio 0–100), aggiungi spiegazioni con il parametro help. La tooltip evita ambiguità e riduce errori di inserimento.
Non usare Integer per riferimenti a record
Per referenziare altri record usa Many2one invece di inserire manualmente un ID in un Integer. La Many2one offre navigazione, regole di cancellazione a cascata e integrazione con l'ORM; un ID grezzo è fragile.
Errori comuni
Errori che si incontrano più spesso con Integer in Odoo.
Confondere Integer con Float
Errore comune: scegliere Integer quando servirebbe Float. Se sono possibili valori come 1.5 o 0.25, Integer tronca i decimali causando perdita di dati. Usa Float o Monetary a seconda del contesto.
Dare per scontato che zero sia valore vuoto
Poiché un campo Integer vuoto restituisce 0, non puoi distinguere tra "mai compilato" e "inserito zero". Se la distinzione è importante, affianca una Boolean come has_score o scegli un tipo che ammetta False.
Non aggiungere l'indice su campi usati spesso nei filtri
Se dimentichi index=True su un campo che poi usi per filtrare, le viste possono diventare lente con molti record. Meglio prevederlo fin dall'inizio.
Usare Integer per percentuali con decimali
Salvare percentuali come interi (es. 75 = 75%) funziona fino a quando non servono decimali. Se è possibile avere 72.5% usa Float fin da subito.
Dimenticare store=True su computed usate nei filtri
Uno degli errori più comuni: una computed Integer senza store=True non è disponibile per domini, azioni automatiche o group-by. Pensa all'uso prima di decidere.
Conclusione
Il campo Integer è un mattone fondamentale del modello dati Odoo. Sembra semplice e spesso lo è, ma caratteristiche come il ritorno di 0 per i campi vuoti o la necessità di store=True per i filtri sono dettagli che evitano bug difficili da risolvere.
Che tu stia configurando Odoo per la forza vendita, sviluppando un modulo su misura o impostando regole di riordino per un magazzino, i campi Integer salteranno fuori in molte decisioni. Conoscerne il corretto impiego rispetto a Float o Monetary rende l'implementazione più robusta e mantenibile.
Se stai progettando personalizzazioni Odoo e vuoi che il modello dati sia solido fin dall'inizio, questa conoscenza di base ripaga durante tutta la vita del progetto.
Collabora con un esperto Odoo
Da Dasolo supportiamo aziende nell'implementazione, personalizzazione e ottimizzazione di Odoo in tutti i moduli e i settori. Progettiamo modelli dati puliti, costruiamo campi e workflow su misura e integriamo Odoo con sistemi esterni tramite API.
Se hai dubbi sulla tua configurazione Odoo o vuoi parlare di un progetto, contatta il nostro team. Saremo felici di aiutarti.