Passa al contenuto

Campo Float in Odoo: Guida Completa

Una guida pratica al campo Float nel modello di dati Odoo, dall'uso di base al controllo della precisione e alla personalizzazione tecnica
6 marzo 2026 di
Campo Float in Odoo: Guida Completa
Dasolo
| Ancora nessun commento

Introduzione


Il campo Float è uno dei tipi di campo più frequentemente utilizzati in Odoo quando i tuoi dati coinvolgono numeri decimali. Prezzi unitari, pesi dei prodotti, percentuali di sconto, tassi d'imposta, fattori di conversione nei distinte base - tutti questi sono tipicamente memorizzati come campi Float nel modello dati di Odoo.


A prima vista sembra un semplice input numerico. Ma ci sono diverse cose da sapere su come gestisce la precisione, come si comporta nei report e nelle aggregazioni, e quando dovresti utilizzare un tipo di campo diverso.


Questa guida copre cosa memorizza il campo Float, come si comporta nel framework Odoo, come crearlo e personalizzarlo utilizzando Odoo Studio o Python, e casi d'uso aziendali reali in Vendite, Inventario e Contabilità.

Cos'è il campo Float in Odoo


Nell'ORM di Odoo, il campo Float memorizza numeri decimali. Si mappa a una colonna double precision in PostgreSQL, che fornisce fino a 15 cifre significative di precisione. Per la maggior parte dei casi d'uso aziendali, ciò è molto più di quanto tu abbia bisogno.


Dal punto di vista dell'utente, un campo Float appare come un input numerico nelle viste dei moduli. Il numero di decimali mostrati è controllato dal parametro digits che definisci sul campo. Nelle viste elenco, i valori Float vengono visualizzati con la stessa precisione e sono allineati a destra per impostazione predefinita. Nelle tabelle pivot e nei grafici, i campi Float partecipano ad aggregazioni come somma, media o massimo.


Ecco come appare in una definizione di modello Python:

from odoo import fields, models

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

    custom_margin = fields.Float(
        string='Custom Margin',
        digits=(5, 2),
        default=0.0,
    )

Il parametro digits è una tupla. Il primo numero è il numero totale di cifre significative, il secondo è il numero di decimali. Quindi (5, 2) consente fino a cinque cifre significative con due decimali.

Puoi anche fare riferimento a un gruppo di precisione nominato piuttosto che codificare a mano i numeri:


price_premium = fields.Float(
    string='Price Premium',
    digits='Product Price',
)

Odoo ha diversi gruppi di precisione predefiniti gestiti sotto Impostazioni > Tecnico > Struttura del database > Accuratezza decimale. I principali includono Product Price, Product Unit of Measure, Discount e Stock Weight. Utilizzare gruppi di precisione significa che gli utenti possono regolare la precisione decimale dall'interfaccia senza alcuna modifica del codice.


In Odoo Studio, il campo Float è etichettato come Decimal Number. Quando viene creato tramite Studio, utilizza la precisione predefinita a meno che non venga configurato diversamente nel pannello delle proprietà del campo. Questo lo rende uno dei campi Odoo studio più accessibili per gli utenti aziendali che hanno bisogno di estendere i moduli senza supporto da parte degli sviluppatori.

Come funziona il campo


Quando definisci un campo Float in Odoo, il framework gestisce automaticamente la creazione della colonna nel database durante l'installazione o l'aggiornamento del modulo. Non sono necessari script SQL manuali o di migrazione.


Il parametro digits controlla due cose contemporaneamente: come i valori vengono visualizzati nell'interfaccia e come vengono arrotondati prima di essere memorizzati. Se definisci digits=(6, 2) e un utente inserisce 3.14159, Odoo arrotonda e memorizza 3.14. Questo arrotondamento avviene a livello ORM, non solo nel livello di visualizzazione.


Attributi chiave del campo

Queste sono le proprietà più importanti che puoi configurare su un campo Float nel framework Odoo:

  • digits: Una tupla come (6, 2) o una stringa di gruppo di precisione nominata. Controlla sia la precisione di visualizzazione che quella di archiviazione.
  • required: Rende il campo obbligatorio. Un campo Float con un valore di 0.0 supererà il controllo richiesto, il che potrebbe non essere sempre il comportamento desiderato.
  • default: Valore predefinito quando viene creato un nuovo record. Impostare default=0.0 assicura che il campo abbia sempre un valore numerico piuttosto che False.
  • compute: Collega un metodo Python che calcola dinamicamente il valore del campo. Utile per valori derivati come margini o risultati di conversione nei campi calcolati di odoo.
  • store: Quando usato con compute, salva il valore calcolato nel database in modo che possa essere cercato, filtrato e raggruppato.
  • group_operator: Controlla come il campo viene aggregato nelle viste pivot e grafico. I valori comuni sono 'sum', 'avg', 'min' e 'max'. I campi Float per impostazione predefinita sono 'sum'.
  • copy: Controlla se il valore viene copiato quando si duplica un record. Per impostazione predefinita è True.

Come appare nelle viste

Nelle viste di modulo, un campo Float si presenta come un input numerico. La visualizzazione rispetta la localizzazione dell'utente per i separatori decimali. Nelle viste elenco, i valori Float sono allineati a destra per impostazione predefinita. Nelle viste di ricerca, puoi filtrare per valori Float utilizzando operatori di confronto numerico.


Puoi applicare widget ai campi Float nelle viste. Il widget percentage, ad esempio, moltiplica il valore memorizzato per 100 per la visualizzazione e aggiunge un simbolo di percentuale, utile per i campi che memorizzano valori nell'intervallo 0-1. Questo è un modello comune nello sviluppo di Odoo quando si lavora con tassi e fattori.


Interazione con l'ORM di Odoo

Leggere un campo Float ti restituisce un float Python, o False se il campo non è stato impostato e non è definito alcun valore predefinito. Scrivere in un campo Float accetta interi, float o False. L'ORM applica la precisione da digits al momento del salvataggio.


Una nota importante per lo sviluppo di Odoo: non confrontare i valori Float con == in Python. A causa di come funziona l'aritmetica in virgola mobile a livello hardware, valori che sembrano uguali potrebbero non esserlo. Utilizza float_compare e float_is_zero da odoo.tools.float_utils invece, che rispettano la precisione del campo definita nel tuo modello di dati Odoo.

Casi d'uso aziendali


Il campo Float appare in quasi ogni modulo di un'implementazione Odoo. Ecco cinque esempi pratici da flussi di lavoro aziendali reali.


Vendite: Percentuali di Sconto sulle Linee d'Ordine

Il campo nativo discount su sale.order.line è un campo Float. Quando un rappresentante di vendita applica uno sconto del 15%, Odoo memorizza 15.0 e lo applica al calcolo del prezzo unitario. Questo valore fluisce nei preventivi stampati e nelle fatture ai clienti, e partecipa ai report sui margini. Ottenere gli sconti corretti è importante sia per la comunicazione con i clienti che per l'analisi della redditività aziendale.


Inventario: Pesi e Volumi dei Prodotti

I prodotti in Odoo hanno campi nativi weight e volume, entrambi Float. Un prodotto che pesa 2,5 kg o occupa 0,003 m3 ha bisogno di precisione decimale che un campo Integer semplicemente non può fornire. Questi valori alimentano direttamente i calcoli dei costi di spedizione e le integrazioni con i corrieri. Se stai utilizzando Odoo con un connettore di consegna, valori Float accurati in peso e volume determinano la tariffa di spedizione restituita dall'API del corriere.


Contabilità: Tassi Fiscali

I tassi fiscali su account.tax sono campi Float. Un'IVA standard del 21% è memorizzata come 21.0, un'aliquota ridotta potrebbe essere 6.0 o 5.5. Il motore contabile di Odoo legge questi valori per calcolare gli importi fiscali su ogni fattura e bolletta fornitori. La precisione è importante qui perché piccole differenze di arrotondamento possono accumularsi su centinaia di transazioni e causare discrepanze nei report fiscali.


Produzione: Quantità della Distinta Base

Nella Produzione Odoo, la quantità di ciascun componente in una distinta base è un campo Float. Una ricetta potrebbe richiedere 0,75 litri di un ingrediente liquido o 2,5 kg di una materia prima. I campi Float gestiscono naturalmente queste quantità frazionarie. Utilizzare un campo Integer in questo contesto costringerebbe all'arrotondamento e introdurrebbe errori di produzione che si accumulano nel tempo.


Acquisti: Fattori di Prezzo e Margini dei Fornitori

Quando si impostano listini prezzi dei fornitori o regole di markup, i campi Float memorizzano i moltiplicatori e i margini. Un fattore di margine di 1,25 (25% di markup) o un fattore di sconto di 0,85 (15% di sconto sul prezzo di listino) sono valori tipici nella logica dei prezzi di acquisto. Questi valori Float alimentano i calcoli automatici dei prezzi sugli ordini di acquisto e aiutano i team di acquisto a mantenere prezzi coerenti tra i fornitori.

Creazione o personalizzazione del campo Float


Ci sono tre modi principali per aggiungere un campo Float a un modello Odoo, a seconda del tuo contesto tecnico e dell'approccio di distribuzione.

Utilizzando Odoo Studio (Nessun codice)

Odoo Studio è lo strumento di personalizzazione low-code integrato. Per aggiungere un campo Float senza scrivere codice:


  1. Apri Odoo Studio dal menu principale.
  2. Naviga al modulo in cui desideri il campo.
  3. Trascina un campo Numero Decimale dal selettore di campi nel modulo.
  4. Imposta l'etichetta, il valore predefinito e il numero di decimali nel pannello delle proprietà.
  5. Salva e chiudi Studio.

Studio crea il campo con un prefisso x_studio_ e lo aggiunge automaticamente alla vista del modulo. Non è necessario alcun lavoro sul database da parte tua. Questo è uno dei modi più accessibili per creare campi in Odoo per gli utenti che desiderano personalizzare Odoo senza complessità tecniche.


Utilizzando Python in un Modulo Personalizzato

Per gli sviluppatori che costruiscono moduli Odoo, i campi Float sono definiti direttamente in Python. Questo è l'approccio raccomandato per qualsiasi sviluppo Odoo che deve essere controllato in versione e distribuito su più ambienti:


from odoo import fields, models

class ResPartner(models.Model):
    _inherit = 'res.partner'

    x_credit_limit = fields.Float(
        string='Limite di Credito',
        digits=(12, 2),
        default=0.0,
        help='Saldo massimo consentito per questo cliente.',
    )

Dopo aver aggiunto il campo al modello, includilo nel file XML della vista pertinente affinché appaia nell'interfaccia. Odoo gestisce automaticamente la colonna del database durante l'installazione o l'aggiornamento del modulo. Questo è l'approccio standard della guida per sviluppatori Odoo per qualsiasi lavoro serio di personalizzazione di Odoo.


Utilizzando l'API XML-RPC

Se stai gestendo le personalizzazioni di Odoo in modo programmatico, ad esempio tramite uno script di distribuzione o un notebook di configurazione remota, puoi creare campi Float tramite l'API XML-RPC:

field_id = models.execute_kw(
    ODOO_DB, uid, ODOO_API_KEY,
    'ir.model.fields', 'create',
    [{
        'name': 'x_custom_coefficient',
        'field_description': 'Coefficiente Personalizzato',
        'model_id': model_id,
        'ttype': 'float',
        'state': 'manual',
    }]
)

Il valore state: manual indica a Odoo che questo campo è stato creato manualmente piuttosto che da un modulo, che è l'impostazione corretta per i campi creati tramite Studio o l'API. La precisione decimale per i campi Float creati tramite API è gestita attraverso le impostazioni di Accuratezza Decimale nel menu tecnico. Questo è l'approccio utilizzato da Dasolo per la creazione remota di campi come parte degli script di configurazione automatizzata di Odoo.

Migliori pratiche


1. Utilizza gruppi di precisione nominati per valori standard

Invece di codificare digits=(6, 2), fai riferimento a un gruppo di precisione come 'Prezzo Prodotto' o 'Unità di Misura Prodotto'. Questo consente agli utenti con accesso tecnico di regolare la precisione dall'interfaccia senza modifiche al codice, e allinea i tuoi campi personalizzati con la stessa precisione dei campi nativi di Odoo nello stesso contesto.


2. Usa Monetario per importi in valuta, non Float

Questo è il punto più importante di questa lista. Il campo Monetario è specificamente progettato per importi che hanno una valuta. Si collega a un campo di valuta sullo stesso modello, gestisce l'arrotondamento secondo le regole valutarie e funziona correttamente in ambienti multi-valuta. Utilizzare un campo Float per importi di fattura o prezzi di vendita causerà incoerenze di arrotondamento e romperà il reporting multi-valuta.


3. Imposta sempre un valore predefinito

Imposta default=0.0 per i campi numerici che dovrebbero partire da zero. Senza un valore predefinito, il valore del campo è False (null nel database) fino a quando l'utente non lo compila. Questo può causare errori imprevisti nei campi calcolati o nei metodi Python che assumono che un valore numerico sia sempre presente.


4. Imposta group_operator per i report

Se un campo Float rappresenta una quantità o un importo che ha senso sommare nei report, aggiungi group_operator='sum'. Se rappresenta un tasso o una percentuale dove ha più senso fare una media, usa group_operator='avg'. Avere questo chiaro assicura che le tabelle pivot e le viste grafiche aggregano i tuoi dati in modo significativo, il che è molto importante nei campi del database Odoo utilizzati per l'analisi.


5. Documenta le tue convenzioni sulle percentuali

Se un campo Float memorizza una percentuale, sii esplicito su se utilizza un intervallo da 0 a 100 (come il campo nativo discount: 15.0 per il 15%) o un intervallo da 0 a 1 (come alcuni campi di margine: 0.15 per il 15%). Mischiare queste convenzioni in un modello di dati produce errori di calcolo silenziosi che sono molto difficili da rintracciare in seguito.


Trappole comuni


Utilizzare Float per importi monetari

I campi Float non portano informazioni sulla valuta. Un campo Float che mostra 1500 potrebbe essere euro, dollari o qualsiasi altra cosa. In un setup Odoo multi-valuta, questo porta a totali errati nei report finanziari. Usa il tipo di campo Monetary per qualsiasi importo che ha una valuta.


Non impostare il parametro digits

Senza digits espliciti, Odoo applica una precisione Float predefinita di 2 decimali. Questo va bene per i prezzi ma non per i campi che necessitano di 4 o 6 decimali, come i tassi di cambio o i fattori di conversione delle unità. Un fattore di conversione arrotondato silenziosamente a 2 decimali produrrà errori composti in ogni transazione che lo utilizza.


Confrontare valori Float con == in Python

A causa di come funzionano i numeri in virgola mobile a livello hardware, due valori Float che sembrano identici potrebbero non essere uguali quando confrontati con ==. Ad esempio, 0.1 + 0.2 == 0.3 restituisce False in Python. Usa float_compare(value1, value2, precision_digits=2) e float_is_zero(value, precision_digits=2) da odoo.tools.float_utils per confronti affidabili. Questo è un punto comune in qualsiasi tutorial tecnico Odoo sull'argomento.


Utilizzare Float quando l'Intero è la scelta giusta

Se un campo contiene sempre numeri interi, come un conteggio, un numero di pacchetti o un numero di sequenza, utilizza invece un campo Intero. I campi Float per numeri interi non sono tecnicamente sbagliati, ma creano confusione inutile e invitano gli utenti a inserire valori decimali dove non hanno senso nel contesto aziendale.


Non gestire i valori False nei metodi di calcolo

Un campo Float senza un valore predefinito restituisce False (non 0.0) quando non è stato ancora impostato alcun valore. Se stai eseguendo calcoli basati su campi Float, controlla sempre False prima di eseguire operazioni aritmetiche, oppure aggiungi semplicemente default=0.0 alla definizione del campo. Questo previene le eccezioni TypeError nei metodi di calcolo che si manifestano solo durante scenari di dati reali.

Conclusione


Il campo Float è un elemento fondamentale del modello di dati di Odoo. Gestisce numeri decimali relativi a prezzi, quantità, tassi e misurazioni, e lo fa in modo affidabile quando è configurato con la giusta precisione e valori predefiniti.


Le principali cose da tenere a mente: utilizza gruppi di precisione nominati per valori standard, utilizza Monetary invece di Float per importi in valuta, imposta sempre un valore predefinito e documenta le tue convenzioni per i campi percentuali. Queste abitudini prevengono i problemi di qualità dei dati più comuni prima che abbiano la possibilità di causare problemi in produzione.

Che tu stia aggiungendo campi tramite Odoo Studio, scrivendo un modulo Python personalizzato, o gestendo il tuo modello di dati in modo programmatico tramite l'ORM di Odoo o l'API XML-RPC, ottenere i campi Float corretti fin dall'inizio porta a un'implementazione complessiva più pulita e affidabile.

Da Dasolo, aiutiamo le aziende a implementare, personalizzare e ottimizzare Odoo in tutti i reparti. Che tu abbia bisogno di aiuto per progettare un modello di dati pulito, aggiungere campi personalizzati ai tuoi moduli, o costruire un intero modulo Odoo da zero, il nostro team è qui per supportarti. Contattaci e parliamo del tuo progetto Odoo.

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