Introduksjon
Float-feltet er en av de mest brukte felttypene i Odoo når dataene dine involverer desimaltall. Enhetspriser, produktvekter, rabattprosent, skattesatser, konverteringsfaktorer i materiallister - alt dette lagres vanligvis som Float-felt i Odoo-datamodellen.
Ved første øyekast ser det ut som et enkelt numerisk inndatafelt. Men det er flere ting verdt å vite om hvordan det håndterer presisjon, hvordan det oppfører seg i rapporter og aggregater, og når du bør bruke en annen felttype i stedet.
Denne guiden dekker hva Float-feltet lagrer, hvordan det oppfører seg i Odoo-rammeverket, hvordan du kan opprette og tilpasse det ved hjelp av Odoo Studio eller Python, og virkelige forretningsbrukstilfeller innen salg, lager og regnskap.
Hva er Float-feltet i Odoo
I Odoo ORM lagrer Float-feltet desimaltall. Det kartlegges til en double precision-kolonne i PostgreSQL, som gir opptil 15 signifikante sifre av presisjon. For de fleste forretningsbrukstilfeller er det langt mer enn du trenger.
Fra brukerens perspektiv vises et Float-felt som et numerisk input i skjemaer. Antall desimaler som vises, styres av digits-parameteren du definerer på feltet. I listevisninger vises Float-verdier med samme presisjon og er høyrejustert som standard. I pivot-tabeller og grafer deltar Float-felt i aggregasjoner som sum, gjennomsnitt eller maksimum.
Slik ser det ut i en Python-modelldefinisjon:
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,
)
digits-parameteren er et tuppel. Det første tallet er det totale antallet signifikante sifre, det andre er antallet desimaler. Så (5, 2) tillater opptil fem signifikante sifre med to desimaler.
Du kan også referere til en navngitt presisjonsgruppe i stedet for å hardkode sifrene:
price_premium = fields.Float(
string='Price Premium',
digits='Product Price',
)
Odoo har flere innebygde presisjonsgrupper som administreres under Innstillinger > Teknisk > Databasestruktur > Desimalnøyaktighet. De viktigste inkluderer Produktpris, Produkt enhet av mål, Rabatt, og Lagervekt. Å bruke presisjonsgrupper betyr at brukere kan justere desimalpresisjonen fra grensesnittet uten noen kodeendringer.
I Odoo Studio er Float-feltet merket som Desimaltall. Når det opprettes gjennom Studio, bruker det standard presisjon med mindre du konfigurerer det annerledes i feltets egenskapspanel. Dette gjør det til et av de mer tilgjengelige Odoo-studiofeltene for forretningsbrukere som trenger å utvide skjemaer uten utviklerstøtte.
Hvordan feltet fungerer
Når du definerer et Float-felt i Odoo, håndterer rammeverket kolonneopprettelsen i databasen automatisk under modulinstallasjon eller oppgradering. Ingen manuelle SQL- eller migreringsskripter er nødvendige.
digits-parameteren kontrollerer to ting samtidig: hvordan verdier vises i grensesnittet, og hvordan de avrundes før de lagres. Hvis du definerer digits=(6, 2) og en bruker skriver inn 3.14159, avrunder Odoo og lagrer 3.14. Denne avrundingen skjer på ORM-nivå, ikke bare i visningslaget.
Nøkkelfeltattributter
Dette er de viktigste egenskapene du kan konfigurere på et Float-felt i Odoo-rammeverket:
- digits: Et tuppel som
(6, 2)eller en navngitt presisjonsgruppe-streng. Kontrollerer både visnings- og lagringspresisjon. - required: Gjør feltet obligatorisk. Et Float-felt med en verdi på
0.0vil bestå den obligatoriske sjekken, noe som kanskje ikke alltid er den tiltenkte oppførselen. - default: Standardverdi når en ny post opprettes. Å sette
default=0.0sikrer at feltet alltid har en numerisk verdi i stedet forFalse. - compute: Knytter en Python-metode som dynamisk beregner feltverdien. Nyttig for avledede verdier som marginer eller konverteringsresultater i Odoo-beregnete felt.
- store: Når det brukes med
compute, lagrer den beregnede verdien i databasen slik at den kan søkes, filtreres og grupperes. - group_operator: Kontrollerer hvordan feltet aggregeres i pivot- og grafvisninger. Vanlige verdier er
'sum','avg','min'og'max'. Float-felt har som standard'sum'. - copy: Kontrollerer om verdien kopieres når en post dupliseres. Standardverdi er
True.
Hvordan det vises i visninger
I skjema-visninger gjengis et Float-felt som et numerisk input. Visningen respekterer brukerens lokale innstillinger for desimalseparatorer. I listevisninger er Float-verdier høyrejustert som standard. I søkevisninger kan du filtrere etter Float-verdier ved hjelp av numeriske sammenligningsoperatorer.
Du kan bruke widgets på Float-felt i visninger. Widgeten percentage, for eksempel, multipliserer den lagrede verdien med 100 for visning og legger til et prosenttegn, noe som er nyttig for felt som lagrer verdier i området 0-1. Dette er et vanlig mønster i Odoo-utvikling når man arbeider med satser og faktorer.
Interaksjon med Odoo ORM
Å lese et Float-felt gir deg en Python-float, eller False hvis feltet ikke har blitt satt og ingen standard er definert. Å skrive til et Float-felt aksepterer heltall, flyttall eller False. ORM-en bruker presisjonen fra digits ved lagring.
En viktig merknad for Odoo-utvikling: ikke sammenlign Float-verdier med == i Python. På grunn av hvordan flyttallsaritmetikk fungerer på maskinvare-nivå, kan verdier som ser like ut, faktisk være det ikke. Bruk float_compare og float_is_zero fra odoo.tools.float_utils i stedet, som respekterer feltpresisjonen definert i din Odoo datamodell.
Forretningsbrukstilfeller
Float-feltet finnes i nesten hver modul i en Odoo-implementering. Her er fem praktiske eksempler fra virkelige forretningsarbeidsflyter.
Salg: Rabatter på ordrelinjer
Det innebygde discount-feltet på sale.order.line er et Float-felt. Når en salgsrepresentant anvender en rabatt på 15%, lagrer Odoo 15.0 og bruker det i beregningen av enhetsprisen. Denne verdien flyter gjennom til trykte tilbud og kunde fakturaer, og deltar i marginrapporter. Å få rabatter riktig er viktig for både kundekommunikasjon og analyse av forretningslønnsomhet.
Lager: Produktvekter og volum
Produkter i Odoo har innebygde weight og volume felt, begge Float. Et produkt som veier 2,5 kg eller opptar 0,003 m3 trenger desimalpresisjon som et heltallsfelt simpelthen ikke kan gi. Disse verdiene går direkte inn i beregningene av fraktkostnader og transportørintegrasjoner. Hvis du bruker Odoo med en leveringskobling, bestemmer nøyaktige Float-verdier i vekt og volum fraktprisen som returneres av transportørens API.
Regnskap: Skattesatser
Skattesatser på account.tax er Float-felt. En standard 21% MVA lagres som 21.0, en redusert sats kan være 6.0 eller 5.5. Odoo-regnskapssystemet leser disse verdiene for å beregne skattebeløp på hver faktura og leverandørregning. Presisjon er viktig her fordi små avrundingsforskjeller kan akkumuleres over hundrevis av transaksjoner og forårsake avvik i skatterapporter.
Produksjon: Mengder i materialliste
I Odoo Produksjon er mengden av hver komponent i en materialliste et Float-felt. En oppskrift kan kreve 0,75 liter av en flytende ingrediens eller 2,5 kg av et råmateriale. Float-felt håndterer disse brøkdelsmengdene naturlig. Å bruke et heltallsfelt i denne sammenhengen ville tvinge til avrunding og introdusere produksjonsfeil som akkumuleres over tid.
Innkjøp: Priselementer og leverandørmarginer
Når du setter opp leverandørprislister eller påslagsregler, lagrer Float-felt multiplikatorene og marginene. En marginfaktor på 1,25 (25% påslag) eller en rabattfaktor på 0,85 (15% av listeprisen) er typiske verdier i innkjøpspriser. Disse Float-verdiene går inn i automatiserte prisberegninger på innkjøpsordrer og hjelper innkjøpsteam med å opprettholde konsistente priser på tvers av leverandører.
Opprette eller tilpasse Float-feltet
Det er tre hovedmåter å legge til et Float-felt i en Odoo-modell, avhengig av din tekniske kontekst og distribusjonsmetode.
Bruke Odoo Studio (Ingen kode)
Odoo Studio er det innebygde lavkode-tilpasningsverktøyet. For å legge til et Float-felt uten å skrive kode:
- Åpne Odoo Studio fra hovedmenyen.
- Naviger til skjemaet der du vil ha feltet.
- Dra et Desimaltall-felt fra feltvelgeren til skjemaet.
- Sett etikett, standardverdi og antall desimaler i egenskapspanelet.
- Lagre og lukk Studio.
Studio oppretter feltet med et x_studio_-prefiks og legger det automatisk til skjemaets visning. Ingen databasearbeid nødvendig fra din side. Dette er en av de mest tilgjengelige måtene å opprette felt i Odoo for brukere som ønsker Odoo-tilpasning uten teknisk kompleksitet.
Bruke Python i en tilpasset modul
For utviklere som bygger Odoo-moduler, defineres Float-felt direkte i Python. Dette er den anbefalte tilnærmingen for enhver Odoo-utvikling som må versjonskontrolleres og distribueres på tvers av flere miljøer:
from odoo import fields, models
class ResPartner(models.Model):
_inherit = 'res.partner'
x_credit_limit = fields.Float(
string='Kredittgrense',
digits=(12, 2),
default=0.0,
help='Maksimalt utestående beløp tillatt for denne kunden.',
)
Etter å ha lagt til feltet i modellen, inkluder det i den relevante visningen XML slik at det vises i grensesnittet. Odoo håndterer databasekolonnen automatisk ved modulinstallasjon eller oppgradering. Dette er den standard Odoo utviklerveiledningen for ethvert seriøst Odoo tilpasningsarbeid.
Bruke XML-RPC API
Hvis du administrerer Odoo-tilpasninger programmatisk, for eksempel gjennom et distribusjonsskript eller en ekstern konfigurasjonsnotatbok, kan du opprette Float-felt via 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',
}]
)
Verdien state: manual forteller Odoo at dette feltet ble opprettet manuelt i stedet for av en modul, som er den riktige innstillingen for felt opprettet gjennom Studio eller API. Desimalpresisjon for API-opprettede Float-felt administreres gjennom innstillingene for Desimalnøyaktighet i den tekniske menyen. Dette er tilnærmingen Dasolo bruker for fjernfeltopprettelse som en del av automatiserte Odoo konfigurasjonsskript.
Beste praksis
1. Bruk navngitte presisjonsgrupper for standardverdier
I stedet for å hardkode digits=(6, 2), referer til en presisjonsgruppe som 'Product Price' eller 'Product Unit of Measure'. Dette lar brukere med teknisk tilgang justere presisjon fra grensesnittet uten kodeendringer, og det tilpasser dine tilpassede felt med samme presisjon som native Odoo-felt i samme kontekst.
2. Bruk Monetary for valuta beløp, ikke Float
Dette er det viktigste punktet på denne listen. Monetary-feltet er spesifikt designet for beløp som har en valuta. Det kobles til et valutafelt på samme modell, håndterer avrunding i henhold til valutaregler, og fungerer korrekt i flervaluta-miljøer. Å bruke et Float-felt for fakturabeløp eller salgspriser vil forårsake avrundingsinkonsekvenser og bryte flervaluta-rapportering.
3. Sett alltid en standardverdi
Sett default=0.0 for numeriske felt som skal starte på null. Uten en standardverdi er feltverdien False (null i databasen) til brukeren fyller det ut. Dette kan forårsake uventede feil i beregnede felt eller Python-metoder som antar at en numerisk verdi alltid er til stede.
4. Sett group_operator for rapporter
Hvis et Float-felt representerer en mengde eller beløp som gir mening å summere i rapporter, legg til group_operator='sum'. Hvis det representerer en rate eller en prosentandel der gjennomsnittlig beregning gir mer mening, bruk group_operator='avg'. Å få dette riktig sikrer at pivottabeller og grafvisninger aggregerer dataene dine meningsfullt, noe som betyr mye i Odoo-databasefelt brukt til analyse.
5. Dokumenter prosentkonvensjonene dine
Hvis et Float-felt lagrer en prosentandel, vær eksplisitt om hvorvidt det bruker et 0-100 intervall (som det innebygde discount-feltet: 15.0 for 15%) eller et 0-1 intervall (som noen marginfelt: 0.15 for 15%). Å blande disse konvensjonene på tvers av en datamodell gir stille beregningsfeil som er svært vanskelige å spore etter faktum.
Vanlige fallgruver
Bruke Float for pengebeløp
Float-felt bærer ingen valutainformasjon. Et Float-felt som viser 1500 kan være euro, dollar eller noe annet. I en flervaluta Odoo-oppsett fører dette til feil totale beløp på finansielle rapporter. Bruk Monetary-feltet for ethvert beløp som har en valuta.
Ikke sette parameteren digits
Uten eksplisitt digits bruker Odoo en standard Float-presisjon på 2 desimaler. Dette er greit for priser, men ikke for felt som trenger 4 eller 6 desimaler, som valutakurser eller enhetskonverteringsfaktorer. En konverteringsfaktor som stille avrundes til 2 desimaler vil produsere kumulative feil på tvers av hver transaksjon som bruker den.
Sammenligne Float-verdier med == i Python
På grunn av hvordan flyttall fungerer på maskinvare-nivå, kan to Float-verdier som ser identiske ut, ikke være like når de sammenlignes med ==. For eksempel, 0.1 + 0.2 == 0.3 evalueres til False i Python. Bruk float_compare(value1, value2, precision_digits=2) og float_is_zero(value, precision_digits=2) fra odoo.tools.float_utils for pålitelige sammenligninger. Dette er et vanlig punkt i enhver Odoo teknisk veiledning om emnet.
Bruke Float når Integer er det riktige valget
Hvis et felt alltid inneholder hele tall, som en telling, antall pakker eller et sekvensnummer, bruk et Integer-felt i stedet. Float-felt for hele tall er ikke teknisk feil, men de skaper unødvendig forvirring og inviterer brukere til å skrive inn desimalverdier der ingen gir mening i forretningskonteksten.
Ikke håndtere False-verdier i beregningsmetoder
Et Float-felt uten en standardverdi returnerer False (ikke 0.0) når ingen verdi er satt ennå. Hvis du beregner basert på Float-felt, sjekk alltid for False før du gjør aritmetikk, eller legg ganske enkelt til default=0.0 i feltdefinisjonen. Dette forhindrer TypeError-unntak i beregningsmetoder som bare dukker opp under reelle datascenarier.
Konklusjon
Float-feltet er en grunnleggende byggekloss i Odoo-datamodellen. Det håndterer desimaltall på tvers av priser, mengder, satser og målinger, og det gjør det pålitelig når det er konfigurert med riktig presisjon og standardverdier.
De viktigste tingene å huske på: bruk navngitte presisjonsgrupper for standardverdier, bruk Monetary i stedet for Float for valutabeløp, sett alltid en standardverdi, og dokumenter konvensjonene dine for prosentfelt. Disse vanene forhindrer de vanligste datakvalitetsproblemene før de får sjansen til å forårsake problemer i produksjon.
Enten du legger til felt gjennom Odoo Studio, skriver et tilpasset Python-modul, eller administrerer datamodellen din programmatisk via Odoo ORM eller XML-RPC API, gjør det å få Float-felt riktig fra starten av implementeringen renere og mer pålitelig totalt sett.
Hos Dasolo hjelper vi selskaper med å implementere, tilpasse og optimalisere Odoo på tvers av alle avdelinger. Enten du trenger hjelp til å designe en ren datamodell, legge til tilpassede felt i skjemaene dine, eller bygge et fullstendig Odoo-modul fra bunnen av, er teamet vårt her for å støtte deg. Ta kontakt med oss og la oss snakke om Odoo-prosjektet ditt.