Inleiding
Het Float-veld is een van de meest gebruikte veldtypes in Odoo wanneer uw gegevens decimale getallen bevatten. Eenheidsprijzen, productgewichten, kortingspercentages, belastingtarieven, conversiefactoren in stuklijsten - al deze worden doorgaans opgeslagen als Float-velden in het Odoo-datamodel.
Op het eerste gezicht lijkt het een eenvoudige numerieke invoer. Maar er zijn verschillende dingen die het waard zijn om te weten over hoe het precisie behandelt, hoe het zich gedraagt in rapporten en aggregaties, en wanneer u in plaats daarvan een ander veldtype zou moeten gebruiken.
Deze gids behandelt wat het Float-veld opslaat, hoe het zich gedraagt in het Odoo-framework, hoe u het kunt maken en aanpassen met Odoo Studio of Python, en echte zakelijke gebruikscases in Verkoop, Voorraad en Boekhouding.
Wat is het Float-veld in Odoo
In de Odoo ORM slaat het Float-veld decimale getallen op. Het komt overeen met een double precision kolom in PostgreSQL, die tot 15 significante cijfers van precisie biedt. Voor de meeste zakelijke gebruikscases is dat veel meer dan u nodig heeft.
Vanuit het perspectief van de gebruiker verschijnt een Float-veld als een numerieke invoer in formulierweergaven. Het aantal decimalen dat wordt weergegeven, wordt gecontroleerd door de digits parameter die je op het veld definieert. In lijstweergaven worden Float-waarden met dezelfde precisie weergegeven en standaard rechts uitgelijnd. In draaitabellen en grafieken nemen Float-velden deel aan aggregaties zoals som, gemiddelde of maximum.
Zo ziet het eruit in een Python-modeldefinitie:
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,
)
De digits parameter is een tuple. Het eerste getal is het totale aantal significante cijfers, het tweede is het aantal decimalen. Dus (5, 2) staat maximaal vijf significante cijfers met twee decimalen toe.
Je kunt ook verwijzen naar een benoemde precisiegroep in plaats van de cijfers hard te coderen:
price_premium = fields.Float(
string='Price Premium',
digits='Product Price',
)
Odoo heeft verschillende ingebouwde precisiegroepen die worden beheerd onder Instellingen > Technisch > Database-structuur > Decimale nauwkeurigheid. De belangrijkste zijn Productprijs, Producteenheid, Korting en Voorraadgewicht. Het gebruik van precisiegroepen betekent dat gebruikers de decimale precisie vanuit de interface kunnen aanpassen zonder enige codewijziging.
In Odoo Studio wordt het Float-veld gelabeld als Decimaal Getal. Wanneer het via Studio wordt aangemaakt, gebruikt het de standaardprecisie, tenzij je het anders configureert in het eigenschappenpaneel van het veld. Dit maakt het een van de toegankelijkere Odoo-studio-velden voor zakelijke gebruikers die formulieren willen uitbreiden zonder ondersteuning van ontwikkelaars.
Hoe het veld werkt
Wanneer je een Float-veld in Odoo definieert, zorgt het framework automatisch voor de kolomcreatie in de database tijdens de installatie of upgrade van de module. Er zijn geen handmatige SQL- of migratiescripts nodig.
De digits parameter controleert twee dingen tegelijk: hoe waarden worden weergegeven in de interface en hoe ze worden afgerond voordat ze worden opgeslagen. Als je digits=(6, 2) definieert en een gebruiker 3.14159 invoert, rondt Odoo af en slaat 3.14 op. Deze afronding gebeurt op het ORM-niveau, niet alleen in de weergave-laag.
Belangrijke Veldattributen
Dit zijn de belangrijkste eigenschappen die je kunt configureren op een Float-veld in het Odoo-framework:
- digits: Een tuple zoals
(6, 2)of een genummerde precisiegroepstring. Beheert zowel de weergave- als opslagprecisie. - required: Maakt het veld verplicht. Een Float-veld met een waarde van
0.0zal de vereiste controle doorstaan, wat niet altijd de bedoelde gedraging is. - default: Standaardwaarde wanneer een nieuw record wordt aangemaakt. Het instellen van
default=0.0zorgt ervoor dat het veld altijd een numerieke waarde heeft in plaats vanFalse. - compute: Verbindt een Python-methode die de veldwaarde dynamisch berekent. Nuttig voor afgeleide waarden zoals marges of conversieresultaten in Odoo-berekende velden.
- store: Wanneer gebruikt met
compute, slaat de berekende waarde op in de database zodat deze kan worden doorzocht, gefilterd en gegroepeerd. - group_operator: Beheert hoe het veld wordt geaggregeerd in pivot- en grafiekweergaven. Veelvoorkomende waarden zijn
'sum','avg','min'en'max'. Float-velden hebben standaard'sum'. - copy: Beheert of de waarde wordt gekopieerd bij het dupliceren van een record. Standaard is
True.
Hoe het verschijnt in weergaven
In formulierweergaven wordt een Float-veld weergegeven als een numerieke invoer. De weergave respecteert de gebruikerslocale voor decimale scheidingstekens. In lijstweergaven zijn Float-waarden standaard rechts uitgelijnd. In zoekweergaven kun je filteren op Float-waarden met behulp van numerieke vergelijkingsoperatoren.
Je kunt widgets toepassen op Float-velden in weergaven. De percentage widget, bijvoorbeeld, vermenigvuldigt de opgeslagen waarde met 100 voor weergave en voegt een procentteken toe, wat nuttig is voor velden die waarden in het bereik van 0-1 opslaan. Dit is een veelvoorkomend patroon in Odoo-ontwikkeling bij het werken met tarieven en factoren.
Interactie met de Odoo ORM
Het lezen van een Float-veld geeft je een Python float, of False als het veld niet is ingesteld en er geen standaard is gedefinieerd. Schrijven naar een Float-veld accepteert gehele getallen, floats of False. De ORM past de precisie van digits toe op het moment van opslaan.
Een belangrijke opmerking voor Odoo-ontwikkeling: vergelijk geen Float-waarden met == in Python. Vanwege de manier waarop drijvende-komma-aritmetiek op hardware-niveau werkt, kunnen waarden die gelijk lijken dat misschien niet zijn. Gebruik in plaats daarvan float_compare en float_is_zero van odoo.tools.float_utils, die de veldprecisie respecteren die in uw Odoo-gegevensmodel is gedefinieerd.
Zakelijke gebruikscases
Het Float-veld komt in bijna elke module van een Odoo-implementatie voor. Hier zijn vijf praktische voorbeelden uit echte bedrijfsworkflows.
Verkoop: Kortingpercentages op Orderregels
Het native discount veld op sale.order.line is een Float-veld. Wanneer een verkoper een korting van 15% toepast, slaat Odoo 15.0 op en past dit toe op de berekening van de eenheidsprijs. Deze waarde stroomt door naar afgedrukte offertes en klantfacturen, en het neemt deel aan marge-rapporten. Het correct krijgen van kortingen is belangrijk voor zowel klantcommunicatie als de analyse van de winstgevendheid van het bedrijf.
Voorraad: Productgewichten en Volumes
Producten in Odoo hebben native weight en volume velden, beide Floats. Een product dat 2,5 kg weegt of 0,003 m3 in beslag neemt, heeft decimale precisie nodig die een Integer-veld simpelweg niet kan bieden. Deze waarden worden direct gebruikt in de berekeningen van verzendkosten en carrier-integraties. Als u Odoo gebruikt met een leveringsconnector, bepalen nauwkeurige Float-waarden in gewicht en volume het verzendtarief dat door de carrier-API wordt teruggegeven.
Boekhouding: Belastingtarieven
Belastingtarieven op account.tax zijn Float-velden. Een standaard btw van 21% wordt opgeslagen als 21.0, een verlaagd tarief kan 6.0 of 5.5 zijn. De Odoo boekhoudmachine leest deze waarden om belastingbedragen op elke factuur en leverancierfactuur te berekenen. Precisie is hier belangrijk omdat kleine afrondingsverschillen zich kunnen ophopen over honderden transacties en discrepanties in belastingrapporten kunnen veroorzaken.
Productie: Hoeveelheden in Stukkenlijst
In Odoo Productie is de hoeveelheid van elk component in een stuklijst een Float-veld. Een recept kan vragen om 0,75 liter van een vloeibaar ingrediënt of 2,5 kg van een grondstof. Float-velden kunnen deze fractionele hoeveelheden op een natuurlijke manier verwerken. Het gebruik van een Integer-veld in deze context zou dwingen tot afronding en productie-fouten introduceren die zich in de loop van de tijd opstapelen.
Aankoop: Prijsfactoren en Leveranciersmarges
Bij het opzetten van leveranciersprijs-lijsten of opslagregels, slaan Float-velden de vermenigvuldigers en marges op. Een margefactor van 1,25 (25% opslag) of een kortingsfactor van 0,85 (15% korting op de catalogusprijs) zijn typische waarden in de prijslogica voor aankopen. Deze Float-waarden worden gebruikt in geautomatiseerde prijsberekeningen op inkooporders en helpen inkoopteams om consistente prijzen over leveranciers te handhaven.
Een Float-veld maken of aanpassen
Er zijn drie hoofdmanieren om een Float-veld toe te voegen aan een Odoo-model, afhankelijk van je technische context en implementatieaanpak.
Odoo Studio gebruiken (Geen code)
Odoo Studio is de ingebouwde low-code aanpassingstool. Om een Float-veld toe te voegen zonder enige code te schrijven:
- Open Odoo Studio vanuit het hoofdmenu.
- Navigeer naar het formulier waar je het veld wilt.
- Sleep een Decimaal Getal veld vanuit de veldkiezer naar het formulier.
- Stel het label, de standaardwaarde en het aantal decimalen in het eigenschappenpaneel in.
- Sla op en sluit Studio.
Studio creëert het veld met een x_studio_ voorvoegsel en voegt het automatisch toe aan de formulierweergave. Geen databasewerk nodig aan jouw kant. Dit is een van de meest toegankelijke manieren om velden in Odoo te creëren voor gebruikers die Odoo-aanpassingen willen zonder technische complexiteit.
Python gebruiken in een Aangepaste Module
Voor ontwikkelaars die Odoo-modules bouwen, worden Float-velden direct in Python gedefinieerd. Dit is de aanbevolen aanpak voor elke Odoo-ontwikkeling die versiebeheer nodig heeft en over meerdere omgevingen moet worden uitgerold:
from odoo import fields, models
class ResPartner(models.Model):
_inherit = 'res.partner'
x_credit_limit = fields.Float(
string='Kredietlimiet',
digits=(12, 2),
default=0.0,
help='Maximaal openstaand saldo toegestaan voor deze klant.',
)
Na het toevoegen van het veld aan het model, voeg het toe aan de relevante view XML zodat het in de interface verschijnt. Odoo beheert de databasekolom automatisch bij installatie of upgrade van de module. Dit is de standaardaanpak in de Odoo ontwikkelaarsgids voor serieuze Odoo aanpassingen.
Gebruik de XML-RPC API
Als je Odoo aanpassingen programmatisch beheert, bijvoorbeeld via een implementatiescript of een remote configuratienotebook, kun je Float-velden aanmaken via de XML-RPC API:
field_id = models.execute_kw(
ODOO_DB, uid, ODOO_API_KEY,
'ir.model.fields', 'create',
[{
'name': 'x_custom_coefficient',
'field_description': 'Custom Coefficient',
'model_id': model_id,
'ttype': 'float',
'state': 'manual',
}]
)
De state: manual waarde vertelt Odoo dat dit veld handmatig is aangemaakt in plaats van door een module, wat de juiste instelling is voor velden die zijn aangemaakt via Studio of de API. Decimal precisie voor via de API aangemaakte Float-velden wordt beheerd via de Decimal Accuracy-instellingen in het technische menu. Dit is de aanpak die Dasolo gebruikt voor het op afstand aanmaken van velden als onderdeel van geautomatiseerde Odoo configuratiescripts.
Beste praktijken
1. Gebruik benoemde precisiegroepen voor standaardwaarden
In plaats van digits=(6, 2) hard te coderen, verwijs naar een precisiegroep zoals 'Product Price' of 'Product Unit of Measure'. Dit stelt gebruikers met technische toegang in staat om de precisie vanuit de interface aan te passen zonder codewijzigingen, en het stemt je aangepaste velden af op dezelfde precisie als de native Odoo-velden in dezelfde context.
2. Gebruik Monetary voor valuta bedragen, niet Float
Dit is het belangrijkste punt in deze lijst. Het Monetary-veld is specifiek ontworpen voor bedragen die een valuta hebben. Het is gekoppeld aan een valutaveld op hetzelfde model, behandelt afronding volgens de valutaregels en werkt correct in omgevingen met meerdere valuta's. Het gebruik van een Float-veld voor factuurbedragen of verkoopprijzen zal afrondingsinconsistenties veroorzaken en multi-valuta rapportage verstoren.
3. Stel altijd een standaardwaarde in
Stel default=0.0 in voor numerieke velden die op nul moeten beginnen. Zonder een standaardwaarde is de veldwaarde False (null in de database) totdat de gebruiker deze invult. Dit kan onverwachte fouten veroorzaken in berekende velden of Python-methoden die aannemen dat een numerieke waarde altijd aanwezig is.
4. Stel group_operator in voor rapporten
Als een Float-veld een hoeveelheid of bedrag vertegenwoordigt dat logisch is om op te tellen in rapporten, voeg dan group_operator='sum' toe. Als het een tarief of percentage vertegenwoordigt waarbij gemiddeldes meer zinvol zijn, gebruik dan group_operator='avg'. Dit goed krijgen zorgt ervoor dat draaitabellen en grafiekweergaven uw gegevens op een betekenisvolle manier aggregeren, wat erg belangrijk is in Odoo-databasevelden die voor analyse worden gebruikt.
5. Documenteer uw percentageconventies
Als een Float-veld een percentage opslaat, wees dan expliciet over of het een bereik van 0-100 gebruikt (zoals het native korting veld: 15.0 voor 15%) of een bereik van 0-1 (zoals sommige margevelden: 0.15 voor 15%). Het mengen van deze conventies binnen een datamodel leidt tot stille rekenfouten die na de feiten zeer moeilijk te traceren zijn.
Veelvoorkomende valkuilen
Float gebruiken voor monetaire bedragen
Float-velden bevatten geen valutainformatie. Een Float-veld dat 1500 toont, kan euro's, dollars of iets anders zijn. In een multi-valuta Odoo-configuratie leidt dit tot onjuiste totalen op financiële rapporten. Gebruik het Monetary veldtype voor elk bedrag dat een valuta heeft.
Het niet instellen van de digits-parameter
Zonder expliciete digits past Odoo een standaard Float-nauwkeurigheid van 2 decimalen toe. Dit is prima voor prijzen, maar niet voor velden die 4 of 6 decimalen nodig hebben, zoals wisselkoersen of eenhedenconversiefactoren. Een conversiefactor die stilletjes naar 2 decimalen is afgerond, zal cumulatieve fouten produceren in elke transactie die deze gebruikt.
Float-waarden vergelijken met == in Python
Vanwege de manier waarop drijvende-komma-getallen op hardware-niveau werken, kunnen twee Float-waarden die identiek lijken, niet gelijk zijn wanneer ze worden vergeleken met ==. Bijvoorbeeld, 0.1 + 0.2 == 0.3 evalueert naar False in Python. Gebruik float_compare(value1, value2, precision_digits=2) en float_is_zero(value, precision_digits=2) van odoo.tools.float_utils voor betrouwbare vergelijkingen. Dit is een veelvoorkomend punt in elke Odoo-technische tutorial over het onderwerp.
Float gebruiken wanneer Integer de juiste keuze is
Als een veld altijd gehele getallen bevat, zoals een telling, een aantal pakketten of een volgnummer, gebruik dan in plaats daarvan een Integer-veld. Float-velden voor gehele getallen zijn technisch gezien niet fout, maar ze creëren onnodige verwarring en nodigen gebruikers uit om decimale waarden in te voeren waar geen enkele zinvol is in de zakelijke context.
Geen rekening houden met False-waarden in compute-methoden
Een Float-veld zonder standaardwaarde retourneert False (niet 0.0) wanneer er nog geen waarde is ingesteld. Als je berekeningen uitvoert op basis van Float-velden, controleer dan altijd op False voordat je wiskundige bewerkingen uitvoert, of voeg eenvoudig default=0.0 toe aan de velddefinitie. Dit voorkomt TypeError uitzonderingen in compute-methoden die alleen naar voren komen tijdens echte datascenario's.
Conclusie
Het Float-veld is een fundamenteel bouwblok van het Odoo-datamodel. Het behandelt decimale getallen voor prijzen, hoeveelheden, tarieven en metingen, en dit doet het betrouwbaar wanneer het is geconfigureerd met de juiste precisie en standaardwaarden.
De belangrijkste dingen om in gedachten te houden: gebruik benoemde precisiegroepen voor standaardwaarden, gebruik Monetair in plaats van Float voor valutabedragen, stel altijd een standaardwaarde in, en documenteer je conventies voor percentagevelden. Deze gewoonten voorkomen de meest voorkomende problemen met datakwaliteit voordat ze de kans krijgen om problemen in productie te veroorzaken.
Of je nu velden toevoegt via Odoo Studio, een aangepaste Python-module schrijft, of je datamodel programmatically beheert via de Odoo ORM of XML-RPC API, het vanaf het begin goed instellen van Float-velden zorgt voor een schonere en betrouwbaardere implementatie in het algemeen.
Bij Dasolo helpen we bedrijven bij het implementeren, aanpassen en optimaliseren van Odoo in alle afdelingen. Of je nu hulp nodig hebt bij het ontwerpen van een schoon datamodel, het toevoegen van aangepaste velden aan je formulieren, of het bouwen van een volledige Odoo-module vanaf nul, ons team staat klaar om je te ondersteunen. Neem contact met ons op en laten we praten over jouw Odoo-project.