Introduktion
Har du nogensinde angivet en mængde på en salgsordre, registreret hvor mange dage en opgave har været åben eller sat en prioritet på en kundeemne? Så har du allerede stødt på et heltalsfelt i Odoo. Det er et af de mest brugte felttyper i systemet, men bliver ofte undervurderet i både design og implementering.
For både nøglebrugere, udviklere og konsulenter er det vigtigt at forstå, hvordan heltalsfeltet opfører sig — både i brugerfladen og i ORM’en — for at undgå ubehagelige overraskelser i data og forretningslogik.
Denne guide forklarer præcis, hvad et heltalsfelt gemmer, hvordan Odoo håndterer det teknisk, hvordan du opretter eller ændrer det via Studio eller i Python, samt konkrete anvendelser og ting du skal være opmærksom på.
Hvad er et heltalsfelt i Odoo
I Odoo’s ORM bruges heltalsfeltet til at lagre hele tal — ingen decimaler, ingen brøkdele. I databasen svarer det typisk til en PostgreSQL INTEGER-kolonne (4 bytes), hvilket betyder et interval på cirka -2 milliarder til +2 milliarder.
Set fra brugerens side vises feltet som en enkel numerisk indtastning i formularer og som tal i lister. Det er oplagt til målinger, der kun giver mening i hele enheder: antal, score, dage, rækkefølgenummer eller andre tællelige værdier.
Eksempel på definition i et Python-modul:
from odoo import fields, models
class ProjectTask(models.Model):
_inherit = 'project.task'
estimated_hours = fields.Integer(
string='Estimated Hours',
default=0,
)
Parameteren string bestemmer den label brugeren ser, mens default sætter startværdien for nye poster.
I Odoo Studio findes feltet under navnet Integer. Felter oprettet via Studio får automatisk et x_studio_-præfiks, mens du ved kodeoprettelse selv vælger det tekniske navn.
Hvordan feltet fungerer
Når et heltalsfelt defineres, opretter Odoo automatisk den tilsvarende databasekolonne ved installation eller opgradering af modulet — du behøver ikke lave manuelle SQL-migrationer.
I PostgreSQL får kolonnen typen INTEGER, og ORM’en tager sig af konvertering. Et tomt heltalsfelt returnerer 0 i stedet for None eller False, hvilket adskiller det fra fx Char- eller Float-felter.
Vigtige feltattributter
Følgende egenskaber er de mest relevante at kende til for et heltalsfelt:
- string: Den tekst, der vises i brugerfladen som etikette.
- default: Standardværdien for nye poster. Uden andet angivet er det typisk
0. - required: Gør feltet obligatorisk. Da standarden ofte er
0, bruges dette primært, hvis du vil forhindre gemning ved nul. - readonly: Forhindrer direkte redigering i UI.
- index: Opretter et PostgreSQL-index, hvilket gør søgninger og filtre på feltet meget hurtigere.
- compute: Angiver en Python-metode, der beregner værdien dynamisk udfra andre felter.
- store: Kombineres med
computefor at bestemme, om det beregnede resultat skal gemmes i databasen eller beregnes ved forespørgselstidspunktet. - copy: Styrer om værdien kopieres ved duplikering af en post.
- groups: Begrænser synligheden til bestemte brugerkontogrupper.
Visning i views
I formularer vises et heltalsfelt som et nummerfelt. Odoo kan automatisk tilføje tusindtalsseparatorer for bedre læsbarhed ved store tal.
I lister står tallet som regel højrejusteret. I søgefelter kan du filtrere på lig med, større end og mindre end.
Du kan ændre udseendet ved at tilknytte widgets: priority-widgeten gør fx et heltalsfelt til klikbare stjerner, og progressbar viser værdien som en fremdriftsbjælke sammen med en maksimumværdi.
Samarbejde med Odoo ORM
For udviklere er læsning og skrivning af heltalsfelter enkel: værdien er altid en Python int. En tom værdi kommer tilbage som 0, så vær opmærksom på logik, der skal skelne mellem 'ikke sat' og 'nul', da begge fremstår ens.
Heltalsfelter fungerer problemfrit i beregnede felter, i domæner og i automatiske handlinger, hvor de bruges til filterkriterier eller aggregeringer.
Forretningsscenarier
Praktiske anvendelser
1. CRM: Prioritering af leads
Sælgere bruger ofte en score til at prioritere leads. Et skræddersyet heltalsfelt 'Lead Score' kan opdateres manuelt eller udfyldes automatisk ud fra regler som virksomhedsstørrelse, budget og interaktion.
Det gør det nemt at sortere pipeline og fokusere på de mest lovende muligheder.
2. Salg: Minimumsordremængder
I Salg og Lager bruges heltalsfelter til minimumsordremængder. Sætter du fx minimum 10 stk. på et produkt, afvises ordrer under denne grænse og du undgår senere misforståelser med kunder.
3. Lager: Genbestillingsregler
Genbestillingsregler bruger heltalsfelter til minimums- og maksimumsgrænser. Når beholdningen falder under minimum, oprettes en genforsyningsordre op til maksimum. Korrekte tal her er afgørende for at undgå både udsolgte varer og for meget lager.
4. Projektstyring: Story points og estimater
I projektstyring tilføjes ofte et heltalsfelt til story points eller estimerede timer, så teams kan måle kapacitet og tempo på tværs af sprint og opgaver.
5. Regnskab: Betalingsbetingelsers dage
Betalingsbetingelser bruger heltalsfelter til antal dage (fx Net 30). Disse tal bruges direkte i beregningen af forfaldsdatoer på fakturaer, så præcision er vigtig for likviditetsstyring.
Opret eller tilpas et heltalsfelt
Måder at oprette et heltalsfelt på
Der er primært to tilgange: via Odoo Studio uden kode eller ved at definere feltet i Python for fuld kontrol.
Brug af Odoo Studio
- Odoo Studio er værktøjet til no-code/low-code tilpasninger. Sådan tilføjer du et heltalsfelt i Studio:
- Åbn den formular, hvor feltet skal være.
- Aktivér Studio fra øverste højre menu.
- Træk Integer fra feltpanelet ind på formularen.
- Angiv label, kravstatus og standardværdi.
Gem og luk Studio.
Feltet får automatisk x_studio_-præfiks og oprettes i ir.model.fields. Det er straks tilgængeligt i formularer og lister.
Brug af Python (teknisk tilpasning)
Udviklere definerer feltet direkte i en modelklasse for større fleksibilitet:
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',
)
Efter kodeændringen kører du en opdatering af modulet (fx odoo-bin -u your_module) for at få kolonnen oprettet i databasen.
Oprettelse via XML-RPC API
Du kan også oprette feltet eksternt med XML-RPC, hvilket er praktisk for automatiserede deployment-scripts:
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',
}]
)
For heltalsfelter er ttype sat til 'integer'. state bør være 'manual' for brugerdefinerede felter.
Beregnet heltalsfelt
Beregne felter er nyttige til at udlede værdier automatisk — fx at tælle åbne opgaver på et projekt:
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),
])
Gode fremgangsmåder
Ved at sætte store=True gemmer du resultatet i databasen, så det kan bruges i filtre og sortering uden at blive genberegnet ved hver visning.
Praktiske råd til brug
Brug heltalsfelter til tællinger og værdier der kun giver mening som hele enheder. Hvis målingen kan være brøkdel—fx vægt eller valuta—er Float eller Monetary mere passende.
Vælg en fornuftig standardværdi
Standarden er ofte 0. Overvej om 0 reelt betyder 'ikke sat' i din kontekst. Hvis det gør, kan en ekstra Boolean eller en anden tilgang hjælpe med at skelne mellem 'ikke angivet' og 'nul'.
Indeksér hvis feltet bruges i filtre
Hvis du ofte filtrerer, grupperer eller sorterer efter feltet, tilføj index=True. Et indeks gør forespørgsler langt hurtigere i store databaser, med kun lille pris i lagrings- og skriveomkostninger.
Brug store=True for beregnede felter du filtrerer på
Hvis et beregnet heltalsfelt skal kunne bruges i domæner eller gruppér-funktioner, skal det gemmes i databasen med store=True.
Dokumentér gyldige intervaller
Hvis et felt har et meningsfuldt interval (fx 0–100), så brug help-teksten til at forklare det. Det sparer brugere for gætteri og fejlindtastninger.
Brug ikke heltalsfelter som referencer til andre poster
Hvis du skal pege på en anden post, brug Many2one. At gemme et råt ID i et heltalsfelt er skrøbeligt og omgår ORM’ens fordele som navigation og kaskadeadfærd.
Almindelige fejl
Typiske fejl
Forveksling med Float
Et hyppigt problem er at bruge Integer hvor der kræves decimaler. Hvis 1.5 eller 0.25 kan forekomme, vælg Float — ellers vil data blive afkortet uden advarsel.
At antage at nul betyder tomt
Da tomme heltalsfelter returnerer 0, kan du ikke se forskel på 'aldrig sat' og 'nogen har indtastet nul'. Hvis denne forskel er vigtig, brug en hjælpe-Boolean eller et andet felt som indikator.
Manglede indeks på ofte filtrerede felter
Hvis du senere begynder at bruge feltet i filtre uden at have sat index=True, kan listvisninger blive langsomme på store datamængder. Tænk på indeks tidligt i designet.
Brug af Integer til decimaltal eller procenter med behov for decimaler
At gemme fx 75 for 75% fungerer indtil der opstår behov for fx 72.5%. Hvis decimaler kan blive nødvendige, vælg Float fra starten.
Glemme store=True på beregnede felter, der bruges i filtre
Et beregnet heltalsfelt uden store=True kan ikke anvendes i domæner, automatiske handlinger eller group-by. Overvej feltets brug før du beslutter lagring.
Opsummering
Heltalsfeltet er en grundsten i Odoos datamodel: enkelt at forstå, men med nogle detaljer der påvirker funktionalitet og dataintegritet. Kendskab til ting som standard 0 og nødvendigheden af store=True for visse scenarier sparer dig for fejl og genarbejde.
Uanset om du sætter Odoo op for salg, bygger et modul eller designer genbestillingslogik til et lager, vil heltalsfelter være med i langt de fleste løsninger. At vælge den rigtige felttype og sætte de rette attributter gør din Odoo-implementering robust og lettere at vedligeholde.
Hvis du er i gang med en tilpasning og vil sikre, at datamodellen er korrekt fra starten, betaler denne grundlæggende viden sig gennem hele projektets levetid.
Arbejd med en Odoo-ekspert
Hos Dasolo hjælper vi virksomheder med at implementere, tilpasse og optimere Odoo på tværs af moduler og brancher. Vi rådgiver om datamodellering, bygger specialfelter og workflows, og integrerer Odoo med eksterne systemer via API'er.
Har du spørgsmål til din Odoo-opsætning eller vil du drøfte et projekt, kontakt vores team. Vi hjælper gerne.