Introduktion
Float-feltet bruges bredt i Odoo til værdier med decimaler: enhedspriser, vægte, rabatter, skattesatser og konverteringsfaktorer i styklister gemmes typisk som decimaltal, fordi heltalsfelter ikke kan repræsentere fraktioner præcist.
Ved første øjekast virker det som et simpelt talinput, men der er vigtige detaljer omkring præcision, afrunding og hvordan feltet indgår i rapporter og beregninger — og hvornår et andet felttypevalg vil være bedre.
Denne guide forklarer hvad Float-feltet gemmer, hvordan det opfører sig i Odoo-rammen, hvordan du opretter eller ændrer det via Odoo Studio eller i Python, samt konkrete eksempler fra salg, lager og økonomi.
Hvad er Float-feltet i Odoo
I Odoo's ORM repræsenterer Float et decimaltal, som i PostgreSQL svarer til en double precision-kolonne med op til cirka 15 signifikante cifre — mere end rigeligt til de fleste forretningsformål.
For brugeren vises Float som et talfelt i formularer, hvor antallet af viste decimaler styres af feltets konfiguration. I lister er tallene højrestillede, og i pivot-tabeller eller grafer aggregeres de ved summering, gennemsnit eller maksimum afhængigt af opsætningen.
Eksempel på definition i en Python-model:
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,
)
Parameteren digits er en tuple: første tal angiver maksimalt antal signifikante cifre, andet tal antallet af decimaler. Fx (5, 2) tillader op til fem signifikante cifre med to decimaler.
I stedet for faste cifre kan du pege på en navngivet præcisionsgruppe.
price_premium = fields.Float(
string='Price Premium',
digits='Product Price',
)
Odoo leverer standard præcisionsgrupper under tekniske indstillinger — fx Produktpris, Enhedsmål, Rabat og Vægt. Ved at bruge disse grupper kan brugere ændre decimalpræcision via UI uden at røre kode.
I Odoo Studio findes feltet som "Decimal Number". Når man laver feltet i Studio bruger det standardpræcisionen, med mulighed for at ændre egenskaber i panelet, hvilket gør det let for superbrugere at udvide formularer uden udviklerhjælp.
Sådan fungerer feltet
Når et Float-felt defineres i en modul-klassedefinition, håndterer Odoo automatisk oprettelsen af kolonnen i databasen ved installation eller opgradering — ingen manuel SQL-migrering er nødvendig.
Parameteren digits påvirker både visning og lagring: hvis du sætter digits=(6,2) og en bruger indtaster 3.14159, runder Odoo værdien til 3.14 før den gemmes — det sker i ORM-laget, ikke kun i visningen.
Vigtige feltegenskaber
Her er de mest relevante indstillinger du kan konfigurere på et Float-felt i Odoo.
- digits: En tuple som
(6, 2)eller navnet på en præcisionsgruppe. Styrer både visnings- og lagringspræcision. - required: Gør feltet obligatorisk. Bemærk at
0.0opfylder krav om obligatorisk felt, hvilket ikke altid er ønsket hvis du vil tvinge brugeren til at tage stilling. - default: Sætter standardværdi ved nyoprettelse. Brug
default=0.0for at sikre altid numerisk værdi i stedet forFalse. - compute: Knytter en Python-metode som udregner feltværdien dynamisk — nyttigt til afledte værdier som marginer eller konverteringsresultater.
- store: I kombination med
computesørgerstore=Truefor at værdien gemmes i databasen, så den kan søges og grupperes på. - group_operator: Bestemmer, hvordan feltet aggregeres i pivot og grafer — typisk
'sum','avg','min'eller'max'. Standard er ofte'sum'. - copy: Styrer om værdien kopieres ved duplikering af rekord. Standard er
True.
Visning i forskellige views
I formularer vises Float som et talinput og respekterer brugerens lokalitet for decimal- og tusindtalsseparator. I lister er værdier højrestillede. Search-views tillader numeriske filtre med sammenligningsoperatorer.
Du kan tilføje widgets til Float-felter, fx percentage-widgeten, der ganger lagret værdi med 100 og viser et procenttegn — praktisk til felter der gemmer værdier i intervallet 0–1.
Interaktion med Odoo ORM
Ved læsning får du en Python float eller False hvis feltet ikke er sat og ingen default er defineret. Ved skrivning accepteres int, float eller False. ORM’en anvender digits-præcision ved gem.
Vigtigt for udviklere: undgå at sammenligne floats med ==. Brug i stedet Odoos værktøjer float_compare og float_is_zero fra odoo.tools.float_utils, som tager højde for den præcision feltet er defineret med.
Forretningsscenarier hvor Float bruges
Hvor Float-feltet bruges i praksis
Salg: Rabatprocenter på ordrelinjer
Rabatfeltet på salgslinjer er et Float-felt. Når en sælger angiver 15% gemmer Odoo 15.0 og bruger det i prisberegninger, tilbud og fakturaer — korrekt håndtering påvirker både kundekommunikation og fortjenesteanalyser.
Lager: Produktvægt og volumen
Produkter har vægt og volumen som Float-felter. En vægt på 2.5 kg eller et volumen på 0.003 m3 kræver decimalpræcision for at beregne forsendelsesomkostninger og integrere med transportører korrekt.
Regnskab: Skattesatser
Skattesatser i regnskab gemmes som Floats — fx 21.0 for 21% moms. Præcision er vigtig her, da små afrundingsforskelle kan ophobe sig over mange transaktioner og påvirke rapporteringen.
Fremstilling: Styklistekvantiteter
I produktionen angives mængder i styklister som decimale værdier, fx 0.75 liter eller 2.5 kg. Float håndterer sådanne brøkdele naturligt; heltalsfelter ville tvunget afrunding og skabe produktionsfejl.
Indkøb: Prisfaktorer og leverandørmarginer
Prislister og påslag gemmer multiplikatorer og marginer som Floats — fx 1.25 for 25% påslag eller 0.85 for 15% rabat. Disse bruges til automatiske prisberegninger på indkøbsordrer.
Opret eller tilpas et Float-felt
Tre måder at tilføje et Float-felt på
Brug af Odoo Studio (ingen kode)
Odoo Studio er low-code værktøjet. Sådan gør du uden at skrive kode:
- Åbn Odoo Studio fra hovedmenuen.
- Gå til den formular hvor feltet skal være.
- Træk et "Decimal Number"-felt ind på formularen.
- Sæt label, standardværdi og antal decimaler i egenskabspanelet.
- Gem og luk Studio.
Studio opretter feltet med præfiks x_studio_ og indsætter det i viewet. Intet databasearbejde kræves fra din side — praktisk for brugere der vil tilpasse hurtigt uden udviklerstøtte.
Brug af Python i et custom modul
For udviklere defineres Float-felter i Python — det er anbefalet til versionstyring og udrulning på tværs af miljøer:
from odoo import fields, models
class ResPartner(models.Model):
_inherit = 'res.partner'
x_credit_limit = fields.Float(
string='Credit Limit',
digits=(12, 2),
default=0.0,
help='Maximum outstanding balance allowed for this customer.',
)
Efter feltdefinitionen sørger du for at inkludere det i XML-viewet, så det vises i UI. Odoo håndterer databasekolonnen ved install/upgrade — det er standardmetoden til seriøs tilpasning.
Brug af XML-RPC API
Hvis du automatiserer konfiguration eller bruger scripts, kan felter også oprettes via XML-RPC API'en:
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',
}]
)
Angivelsen state: manual markerer feltet som oprettet uden for et modul (fx via Studio eller API). Præcision for API-oprettede felter håndteres via Decimal Accuracy i tekniske indstillinger — nyttigt ved automatiserede udrulninger.
Gode fremgangsmåder
1. Brug navngivne præcisionsgrupper til standardværdier
I stedet for at låse digits=(6,2) fast, peg på en standardgruppe som Produktpris eller Enhedsmål. Det lader administratorer justere decimalpræcision fra UI og sikrer konsistens med Odoos indbyggede felter.
2. Brug Monetary til beløb, ikke Float
Det vigtigste råd: anvend Monetary for pengeværdier. Monetary kobles til en valuta, følger valutaens afrundingsregler og fungerer i multi-valuta set-ups — vælg ikke almindeligt Float til faktura- eller salgsbeløb.
3. Sæt altid en default-værdi
Brug default=0.0 for felter der bør starte ved nul. Uden default er værdien False indtil brugeren udfylder feltet, hvilket kan føre til fejl i beregnede felter eller Python-logik der forventer tal.
4. Sæt group_operator for rapporter
Bestem hvordan feltet skal aggregeres: 'sum' for summerbare beløb/mængder, 'avg' for rater eller procenter. Korrekt opsætning sikrer meningsfulde pivot-tabeller og grafer.
5. Dokumenter jeres procentkonventioner
Vær eksplicit om hvorvidt procentfelter bruger 0–100 (fx 15.0) eller 0–1 (fx 0.15). Blandede konventioner skaber tavse fejl i beregninger, som kan være svære at finde bagefter.
Almindelige faldgruber
Hvornår Float ikke bør bruges til penge
Float bærer ikke valutaoplysninger. Et tal på 1500 kan være DKK, EUR eller USD — i multi-valuta setup vil det give fejl i rapportering. Brug Monetary-type til alle beløb med valuta.
Ikke at sætte digits-parameteren
Uden eksplicit digits anvender Odoo typisk 2 decimaler som standard. Det kan være utilstrækkeligt for fx valutakurser eller konverteringsfaktorer, hvor 4–6 decimaler kan være nødvendige for at undgå akkumulerede fejl.
At sammenligne float med == i Python
På grund af flydende-punkt aritmetik kan to tilsyneladende ens værdier ikke være lig med ==. Brug float_compare(value1, value2, precision_digits=2) eller float_is_zero(value, precision_digits=2) fra odoo.tools.float_utils for sikre sammenligninger der tager feltets præcision i betragtning.
Brug af Float hvor Integer er korrekt
Hvis feltet altid er et heltal (antal kolli, sekvensnummer), brug Integer. Float kan teknisk set fungere, men tillader unødvendige decimaler og skaber forvirring i forretningsprocesser.
Manglende håndtering af False i compute-metoder
Et Float-felt uden default returnerer False indtil det er sat. Ved beregninger skal du tjekke for False eller sætte default=0.0 for at undgå TypeError i compute-metoder når rigtige data optræder.
Konklusion
Opsummering: Float-feltets rolle
Float er en kernekomponent i Odoo til håndtering af decimaltal i priser, mængder, rater og målinger — og det fungerer stabilt, hvis du konfigurerer præcision, default og aggregeringsadfærd korrekt.
Uanset om du laver felter i Studio, skriver et custom modul i Python eller styrer modellen via ORM/XML-RPC, så giver den rigtige opsætning af Float-felter en mere robust og overskuelig Odoo-implementering.
Hos Dasolo hjælper vi virksomheder med implementering, tilpasning og optimering af Odoo på tværs af forretningsområder — fra datamodellering til udvikling af komplette moduler. Kontakt os og lad os tage en snak om dit Odoo-projekt.