Introduktion
Om du någon gång anger antal på en orderrad, räknar dagar en uppgift varit öppen eller sätter en prioritet på en lead — har du använt ett heltalsfält i Odoo. Det är ett av de mest använda fälttyperna i systemet och spelar ofta en avgörande roll i dagliga processer.
Att förstå hur heltalsfältet beter sig är viktigt för användare som bygger formulär, utvecklare som skriver moduler och konsulter som designar datamodeller för sina kunder.
Denna guide förklarar vad ett heltalsfält lagrar, hur det uppför sig i Odoo-gränssnittet och ORM:en, hur du skapar eller anpassar det med Odoo Studio eller Python, samt praktiska användningsfall och vad du bör vara uppmärksam på.
Vad är ett heltalsfält i Odoo
I Odoos ORM används heltalsfält för att spara hela tal — inga decimaler eller bråkdelar. I databasen motsvaras det av en INTEGER-kolumn i PostgreSQL, en 4‑bytes signed integer som rymmer värden i miljardklassen.
För slutkunden syns heltalsfältet som ett enkelt numeriskt inmatningsfält i formulär eller som en siffra i listvyer. Använd det när värdet alltid ska uttryckas i hela enheter: antal, poäng, dagar, ordningsnummer eller andra mått där halv enhet inte är meningsfull.
Exempel på hur det definieras i en Python-modul:
from odoo import fields, models
class ProjectTask(models.Model):
_inherit = 'project.task'
estimated_hours = fields.Integer(
string='Estimated Hours',
default=0,
)
Parametern string styr etiketten som visas i gränssnittet, medan default sätter det värde som automatiskt fylls i när en ny post skapas.
I Odoo Studio heter fälttypen enkelt "Integer". Fält skapade via Studio får tekniska namn som börjar med x_studio_. När du skapar fält i Python eller via API bestämmer du själv det tekniska namnet.
Hur fältet fungerar
När ett heltalsfält definieras i Odoo skapas motsvarande kolumn i databasen automatiskt vid installation eller uppgradering av modulen — du behöver normalt inte skriva SQL‑migreringar för hand.
I databasen är kolumnen av typen INTEGER. Odoo ORM sköter typkonvertering så att ett tomt heltalsfält returnerar 0 i stället för None eller False. Det skiljer sig från exempelvis Char eller Float, där tomma värden ofta kan vara False.
Viktiga fältegenskaper
Nedan följer de viktigaste attributen du kan ställa in för ett heltalsfält:
- string: Den etikett användaren ser i gränssnittet.
- default: Värdet som automatiskt tilldelas nya poster. Om inget anges är standardvärdet 0.
- required: Gör fältet obligatoriskt. Eftersom standardvärdet är 0 används det främst när du vill förhindra sparande med värdet noll.
- readonly: Gör fältet skrivskyddat i användargränssnittet.
- index: Skapar ett PostgreSQL-index för att snabba upp sökningar och filter på fältet.
- compute: Kopplar fältet till en Python-metod som beräknar värdet dynamiskt utifrån andra fält.
- store: I kombination med compute avgör om det beräknade värdet sparas i databasen eller räknas ut vid behov.
- copy: Styr om värdet ska kopieras när en post dupliceras.
- groups: Begränsar synligheten av fältet till utvalda användargrupper.
Hur det visas i vyer
I formulär visas ett heltalsfält som en numerisk inmatningsruta och Odoo kan lägga till tusentalsavgränsare för större tal för bättre läsbarhet.
I listvyer visas heltal som vanliga siffror, oftast högervaliderade. I sökfält stöder de operatorer som är lika med, större än och mindre än.
Du kan styla heltalsfält med widgets för annat utseende eller beteende. Exempelvis kan widgeten priority göra fältet klickbara stjärnor, och progressbar visa ett heltalsvärde som en stapel i kombination med ett maxvärde.
Interaktion med Odoo ORM
För utvecklare är läsning och skrivning av heltalsfält enkelt: värdet hanteras som en Python int. Eftersom tomma fält returnerar 0 bör du vara uppmärksam på villkor där avsaknad av värde och värdet noll ska behandlas olika.
Heltalsfält fungerar väl i beräknade fält och i domäner som används i vyer, serveråtgärder och automatiseringar i hela Odoo.
Affärsscenarier
Heltalsfält dyker upp i nästan alla Odoo-moduler. Här är fem praktiska exempel där de är centrala.
1. CRM: Lead‑poängsättning
Säljorganisationer använder ofta ett heltalsfält för lead‑poäng (Lead Score). Fältet kan uppdateras manuellt av säljare eller beräknas automatiskt utifrån kriterier som företagsstorlek, budget eller engagemang.
Det gör det enkelt att sortera pipeline efter poäng och prioritera de mest intressanta affärsmöjligheterna.
2. Försäljning: Minsta beställningskvantitet
I försäljnings‑ och lagerhantering används heltal för att ange minsta beställningskvantitet på produkter eller prislistor. Att sätta minstaantal till exempelvis 10 enheter förhindrar att order under tröskeln accepteras.
3. Lager: Påfyllningsregler
Påfyllningsregler i Odoo bygger helt på heltalsfält för minimi- och maxkvantiteter. När lagret understiger minimiantalet triggas automatiskt en beställning upp till maxantalet. Rätt inställda värden minskar risken för både brist och överlager.
4. Projekt: Story points och tidsestimat
Vid agil projektstyrning används heltalsfält ofta för story points eller uppskattade timmar. Fältet visas på uppgifter i kanban eller listvy och hjälper teamet att följa kapacitet och hastighet över sprintar.
5. Ekonomi: Betalvillkor i dagar
I redovisningen används heltalsfält för att definiera antal dagar i betalvillkor — till exempel Netto 30 eller Netto 60. Dessa värden påverkar förfallodatum för fakturor och är viktiga för kassaflödeshantering.
Skapa eller anpassa ett heltalsfält
Det finns två huvudsakliga sätt att lägga till ett heltalsfält i en Odoo-modell: via Odoo Studio utan kod, eller i Python för större kontroll.
Använda Odoo Studio
Odoo Studio är verktyget för no‑code/low‑code-anpassningar. För att lägga till ett heltalsfält i Studio gör du följande:
- Öppna det formulär där fältet ska läggas till.
- Aktivera Studio från menyfältet uppe till höger.
- Dra fälttypen Integer från fältlistan och placera den på formuläret.
- Ange etikett, om fältet ska vara obligatoriskt och standardvärde.
- Spara och avsluta Studio.
Studio skapar fältet med x_studio_-prefix och sparar definitionen i ir.model.fields. Fältet blir omedelbart tillgängligt i formulär och listvyer.
Använda Python (teknisk anpassning)
För utvecklare som skapar moduler definieras heltalsfält i en Python‑klass:
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 att ha lagt till fältet i koden kör du odoo-bin -u your_module för att applicera ändringarna — kolumnen skapas automatiskt i databasen.
Skapa fält via XML‑RPC API
Det går även att skapa heltalsfält fjärrstyrt med Odoos XML‑RPC API, praktiskt vid automatiserade driftsättningar eller när du saknar direkt serveråtkomst:
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',
}]
)
För heltalsfält ska ttype sättas till 'integer' och state till 'manual' för att ange att det är ett användardefinierat fält.
Lägga till ett beräknat heltalsfält
Beräknade heltalsfält är användbara för automatiska värden — till exempel att räkna öppna uppgifter i ett 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),
])
Att använda store=True gör att det beräknade värdet sparas i databasen, vilket möjliggör filtrering och sortering utan att räkna om vid varje vyuppdatering.
Bästa praxis
Praktiska tips för heltalsfält
Använd Integer för räkningar och heltal
Välj Integer när värdet alltid ska vara ett heltal. För valuta, mätningar eller värden som kan vara bråkdelsvärden är Float eller Monetary mer lämpligt.
Sätt ett rimligt standardvärde
Heltalsfält standarderar till 0. Fundera på om 0 verkligen är meningsfullt i din process — om inte, överväg att lägga till en hjälpfält eller annan logik för att skilja mellan "inte satt" och "noll".
Lägg till index om du filtrerar ofta
Om fältet ofta används i filter, sortering eller gruppering, sätt index=True för bättre prestanda på större databaser. Kostnaden i lagring och skrivtid är ofta försvarbar för sökbarhet.
Använd store=True för beräknade fält som ska sökas
Beräknade heltalsfält som användarna behöver filtrera eller sortera på bör alltid sparas i databasen med store=True för att fungera i domäner och gruppningar.
Dokumentera giltiga intervall
Om fältet bara får ligga inom ett visst intervall — exempelvis 0–100 — lägg in den informationen i help-parametern så användarna förstår vilka värden som är tillåtna.
Tänk efter innan du använder Integer för ID‑referenser
Vill du peka på en annan post — använd Many2one i stället för att spara en primärnyckel i ett heltalsfält. Many2one ger navigering, ORM‑stöd och säkrare referenser; ett rått ID i ett heltalsfält blir lätt skört.
Vanliga fallgropar
Vanliga misstag
Förväxla Integer och Float
En frekvent miss är att använda Integer där Float krävs. Om användarna kan behöva t.ex. 1.5 eller 0.25, välj Float — annars försvinner decimalerna och du riskerar felaktiga data.
Tro att noll innebär tomt
Eftersom tomma heltalsfält returnerar 0 går det inte att skilja mellan "aldrig ifyllt" och "medvetet satt till noll". Om det är viktigt, lägg till ett boolskt fält som indikerar om värdet blivit satt, eller använd en annan fälttyp.
Glöm inte index på ofta filtrerade fält
Att inte lägga till index på fält som används i filter kan göra vyer långsamma på stora databaser. Bättre att tänka på prestanda tidigt än optimera i efterhand.
Använda Integer för procent eller decimaltal
Att spara procenttal som heltal (t.ex. 75 för 75 %) fungerar tills krav på decimalprecision uppstår. Om det finns risk för halva procenttal, välj Float från början.
Missa store=True på beräknade fält som ska filtreras
Ett vanligt utvecklarfel är att glömma store=True för beräknade fält som behöver användas i domäner eller gruppering. Sådana fält fungerar inte korrekt i filter om de inte är lagrade.
Sammanfattning
Heltalsfältet är en grundsten i Odoo‑datamodellen: enkelt till ytan men viktigt att känna till detaljerna. Att veta att tomma fält blir 0 och att beräknade fält behöver store=True för filter hjälper dig undvika många vanliga problem.
Oavsett om du konfigurerar Odoo för sälj, utvecklar anpassade moduler eller sätter upp påfyllningsregler i lager, kommer heltalsfält att dyka upp. Rätt val mellan Integer, Float och Monetary bidrar till en stabil och lättunderhållen implementation.
Om du arbetar med en Odoo‑anpassning och vill vara säker på att din datamodell är robust från start, betalar den här grundläggande kunskapen igenom hela projektets livslängd.
Arbeta med en Odoo-expert
På Dasolo hjälper vi företag att implementera, anpassa och optimera Odoo över moduler och branscher. Vi kan designa rena datamodeller, bygga skräddarsydda fält och arbetsflöden samt integrera Odoo med externa system via API:er.
Om du har frågor kring din Odoo‑lösning eller vill diskutera ett projekt, kontakta vårt team. Vi hjälper dig gärna.