Introduktion
Om du någonsin har angett en kvantitet på en försäljningsorder, spårat hur många dagar en uppgift har varit öppen, eller konfigurerat en prioriteringspoäng på en lead, har du använt ett heltalsfält i Odoo. Det är en av de vanligaste fälttyperna i Odoo-datamodellen, och ändå underskattas det ofta.
Att förstå hur heltalsfältet fungerar är viktigt för affärsanvändare som konfigurerar formulär, för utvecklare som skriver anpassade moduler, och för konsulter som designar datamodeller för sina kunder.
Denna guide täcker vad heltalsfältet lagrar, hur det beter sig i Odoo-ramverket och gränssnittet, hur man skapar eller anpassar det med Odoo Studio eller Python, tillsammans med praktiska användningsfall och saker att se upp för.
Vad är heltalsfältet i Odoo
I Odoo ORM är heltalsfältet utformat för att lagra hela nummer. Inga decimaler, inga bråk. Det mappas direkt till en INTEGER-kolumn i PostgreSQL, som är ett 4-byte signerat heltal som stöder värden från ungefär -2 miljarder till +2 miljarder.
Ur användarens perspektiv framstår ett heltalsfält som en enkel numerisk inmatning i formulär och som en nummerkolumn i listvyer. Det är det rätta valet för allt som måste räknas i hela enheter: kvantiteter, poäng, varaktigheter i dagar, sekvensnummer eller någon metrisk där en halv enhet inte ger mening.
Här är en typisk definition 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. Parametern default ställer in värdet automatiskt när en ny post skapas.
I Odoo Studio listas denna fälttyp helt enkelt som Integer. När den skapas genom Studio får den ett x_studio_-prefix. När den skapas via Python eller XML-RPC API väljer du det tekniska namnet själv.
Hur fältet fungerar
När du definierar ett heltalsfält i Odoo skapar ramverket automatiskt den motsvarande databas-kolumnen under modulinstallation eller uppgradering. Du behöver inte skriva SQL-migrationer manuellt.
På databasnivå är kolumnen typad som INTEGER i PostgreSQL. Odoo ORM tar hand om typkonvertering, så om användaren inte anger något returnerar fältet 0 istället för None eller False. Detta är en viktig skillnad jämfört med andra fälttyper som Float eller Char, som kan returnera False när de är tomma.
Nyckelfältsattribut
Här är de viktigaste egenskaperna du kan konfigurera på ett heltalsfält:
- string: Etiketten som visas för användare i gränssnittet.
- default: Värdet som automatiskt tilldelas nya poster. Standardvärdet är
0om det inte anges. - required: Gör fältet obligatoriskt. Eftersom standardvärdet redan är
0, är detta mest användbart när du vill blockera sparande med ett nollvärde. - readonly: Förhindrar användare från att redigera värdet direkt i gränssnittet.
- index: Skapar ett PostgreSQL-index på kolumnen, vilket snabbar upp filter och sökningar på det fältet.
- compute: Kopplar en Python-metod som dynamiskt beräknar fältvärdet från andra fält.
- store: I kombination med
compute, kontrollerar om det beräknade värdet sparas i databasen eller om det beräknas på nytt. - copy: Kontrollerar om värdet förs över när en post dupliceras.
- groups: Begränsar synligheten av fältet till specifika användargrupper.
Hur det visas i vyer
I formulärvyer renderas ett heltal som en numerisk inmatningsruta. Odoo lägger automatiskt till tusentalsavgränsare för läsbarhet när större nummer visas.
I listvyer visas heltalsfält som vanliga nummer, högerjusterade enligt konvention. I sökvyer stöder de lika med, större än och mindre än filter.
Du kan para ett heltalsfält med specifika widgets i vyer för att ändra hur det ser ut. Widgeten priority gör till exempel ett heltalsfält till klickbara stjärnor. Widgeten progressbar kan visa ett heltalsvärde som en progressbar när den kombineras med ett maximalt värde.
Interaktion med Odoo ORM
Ur ett utvecklarperspektiv är det enkelt att läsa och skriva heltalsfält. Värdet är alltid en Python int. Tomma heltalsfält returnerar 0, vilket innebär att du bör vara försiktig när du skriver villkor som kontrollerar avsaknaden av ett värde. En nolla och ett tomt fält ser likadana ut om du inte designar runt det.
Heltalsfält fungerar också naturligt i beräknade fält och i domänfilter som används av vyer, serveråtgärder och automatiserade åtgärder genom hela Odoo-ramverket.
Affärsanvändningsfall
Heltalsfältet dyker upp i nästan varje modul i Odoo. Här är fem praktiska scenarier där det spelar en central roll.
1. CRM: Lead Scoring
Säljteam vill ofta prioritera leads baserat på en poäng. Du kan lägga till ett anpassat heltalsfält som kallas Lead Score på CRM-möjlighetsmodellen. Säljrepresentanter uppdaterar poängen manuellt, eller en automatiserad åtgärd beräknar den baserat på kriterier som företagsstorlek, budget eller engagemangsnivå.
Detta gör det enkelt att sortera din pipeline efter poäng och fokusera på de mest lovande möjligheterna.
2. Försäljning: Minimiorderkvantiteter
I Försäljnings- och Lager-modulerna kontrollerar heltalsfält minimiorderkvantiteter på produkter eller prislistor. Genom att ställa in ett minimum på 10 enheter på en produkt säkerställs att systemet blockerar beställningar under den tröskeln, vilket sparar fram och tillbaka med kunder senare.
3. Lager: Återbeställningsregler
Återbeställningsregler i Odoo är helt beroende av heltalsfält för minimi- och maximikvantitetströsklar. När lagret sjunker under minimum triggar Odoo automatiskt en påfyllnadsorder upp till den definierade maximum. Att få dessa värden rätt är avgörande för att undvika både lagerbrist och överlager.
4. Projektledning: Story Points och Arbetsinsatser
Team som använder Odoo Project för agila arbetsflöden lägger ofta till ett anpassat heltalsfält för story points eller uppskattade timmar. Detta fält visas på uppgifter i kanban- eller listvy och hjälper teamet att spåra kapacitet och hastighet över sprintar.
5. Bokföring: Betalningsvillkor Dagar
Betalningsvillkor i Odoo Bokföring använder heltalsfält för att definiera antalet dagar som tillåts för betalning. Net 30, Net 60 eller anpassade villkor konfigureras alla genom heltalsvärden. Dessa värden matas direkt in i beräkningarna av fakturans förfallodatum, vilket gör noggrannhet här viktigt för kassaflödeshantering.
Skapa eller anpassa heltalsfältet
Det finns två huvudsakliga sätt att lägga till ett heltalsfält i en Odoo-modell: använda Odoo Studio utan att skriva kod, eller definiera det direkt i Python för mer kontroll.
Använda Odoo Studio
Odoo Studio är det kodfria och låga kodverktyget som är inbyggt i Odoo för att anpassa fält och vyer. För att lägga till ett heltalsfält genom Studio:
- Öppna formuläret där du vill lägga till fältet.
- Aktivera Studio från menyn uppe till höger.
- I fältlistan till vänster, dra Heltal fälttypen till ditt formulär.
- Ställ in fältetiketten, välj om det är obligatoriskt och konfigurera standardvärdet.
- Spara och avsluta Studio.
Studio skapar fältet med ett x_studio_ prefix automatiskt och lagrar definitionen i ir.model.fields. Fältet är omedelbart tillgängligt i formulär och listvyer.
Använda Python (Teknisk Anpassning)
För utvecklare som bygger anpassade moduler eller utför Odoo-utveckling med mer kontroll definieras heltalsfältet direkt i en Python-modellklass:
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='Poäng från 0 till 100 som används för att prioritera möjligheter',
)
Efter att ha definierat fältet i koden, kör odoo-bin -u your_module för att tillämpa ändringarna i databasen. Kolumnen skapas automatiskt.
Använda XML-RPC API
Du kan också skapa ett heltalsfält på distans med Odoo XML-RPC API. Detta är användbart för automatiserade distributioner eller när du arbetar utan 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',
}]
)
Värdet för ttype för heltalsfält är helt enkelt 'integer'. state måste vara 'manual' för att indikera ett anpassat fält snarare än ett moduldefinierat.
Lägga till ett beräknat heltalsfält
Beräknade heltalsfält är kraftfulla för att automatiskt härleda värden. Till exempel, räkna antalet uppgifter kopplade till ett projekt:
class Project(models.Model):
_inherit = 'project.project'
open_task_count = fields.Integer(
string='Öppna uppgifter',
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 ställa in store=True sparar värdet i databasen, vilket gör det tillgängligt för filtrering och sortering i listvyer utan att behöva beräkna det varje gång.
Bästa praxis
Här är praktiska tips för att få ut det mesta av heltalsfält i din Odoo-datamodell.
Använd heltal för räkningar och heltalskvantiteter
Välj heltal när värdet alltid måste vara ett heltal och decimaler inte skulle ge mening. För allt som involverar pengar, mått eller kvantiteter som kan vara bråkdelar, använd istället Float- eller Monetary-fälttypen.
Ställ in ett rimligt standardvärde
Heltalsfält har som standard 0 i Odoo. I många fall är det okej, men tänk igenom om noll är ett meningsfullt värde för ditt användningsfall. Om noll betyder något specifikt (som att ingen poäng har tilldelats ännu), kan du vilja hantera det uttryckligen i din affärslogik eller lägga till ett hjälpfält av typen Boolean för att spåra om värdet har satts.
Lägg till ett index när du filtrerar på fältet
Om du planerar att filtrera, sortera eller gruppera efter ett heltalsfält ofta, lägg till index=True i fältdefinitionen. Detta skapar ett databasindex och kan avsevärt snabba upp frågor på stora datamängder. Avvägningen är en liten ökning av lagring och skrivtid, vilket nästan alltid är värt det för fält som används i sökvillkor.
Använd store=True för beräknade heltalsfält
Om du definierar ett beräknat heltalsfält som användare behöver filtrera eller sortera på i listvyer, ställ alltid in store=True. Utan det kan Odoo inte använda fältet i domänfilter, och gruppering efter det kommer inte att fungera som förväntat.
Dokumentera dina intervall
När ett heltalsfält har ett meningsfullt intervall, som en poäng från 0 till 100, dokumentera det i help-parametern. Denna text visas som en tooltip i gränssnittet och sparar användare från att gissa vilka värden som är giltiga.
Tänk efter en gång till innan du använder heltal för ID:n eller referenser
Om du behöver referera till en annan post, använd ett Many2one-fält istället för att lagra ett ID i ett heltalsfält manuellt. Many2one-fält ger dig inbyggd navigering, kaskadregler och korrekt ORM-integration. Ett heltal som håller ett rått ID är ömtåligt och kringgår Odoo-ramverket.
Vanliga fallgropar
Det här är de misstag som oftast dyker upp när man arbetar med heltalsfält i Odoo.
Förväxla heltal med flyttal
Ett vanligt misstag är att använda ett heltalsfält där ett flyttalsfält skulle vara mer lämpligt. Om dina användare någonsin behöver ange 1,5, 0,25 eller något bråktal är heltal fel val. Odoo kommer tyst att trunkera decimalinmatning, vilket leder till databasförlust och förvirring för användarna. Använd flyttal för kvantiteter som kan vara bråkdelar, och monetära värden för valutavärden.
Anta att noll betyder tomt
Eftersom heltalsfält alltid returnerar 0 när de inte är inställda, finns det inget sätt att särskilja mellan en post där fältet aldrig har fyllts i och en där någon avsiktligt har angett noll. Om denna åtskillnad är viktig för ditt arbetsflöde, lägg till ett booleskt fält som has_score bredvid heltalet, eller använd ett flyttalsfält med en False standard istället.
Att inte lägga till ett index på ofta filtrerade fält
Om du lägger till ett heltalsfält och senare använder det som ett filter i vyer eller automatiserade åtgärder, kan det att glömma att lägga till index=True märkbart sakta ner listvyer på större databaser. Det är lättare att lägga till indexet från början än att optimera senare.
Använda heltal för att lagra decimalbaserade förhållanden
Ibland lagrar utvecklare procentandelar som heltalsfält och skriver 75 för att betyda 75%. Detta fungerar tills någon behöver 72,5%, vid vilket tillfälle fältet bryter kravet. Om det finns någon chans att en procentandel eller ett förhållande kommer att behöva decimalprecision, använd flyttal från början.
Glömma store=True på beräknade fält som används i filter
Detta är ett av de vanligaste misstagen inom Odoo-utveckling. Ett beräknat heltalsfält utan store=True kan inte användas i domänfilter, automatiserade åtgärder eller gruppering av listvyer. Tänk alltid på var fältet kommer att användas innan du bestämmer dig för om det ska lagras.
Slutsats
Heltalsfältet är en grundläggande byggsten i Odoo-datamodellen. Det ser enkelt ut, och i de flesta fall är det det. Men att känna till dess specifika beteenden, som att tomma fält returnerar 0 och att beräknade fält behöver store=True för att fungera i filter, hjälper dig att undvika de typer av buggar och designproblem som är lätta att introducera och svårare att åtgärda senare.
Oavsett om du konfigurerar Odoo för ett säljteam, bygger en anpassad modul eller designar ombeställningsregler för ett lager, kommer heltal att dyka upp i varje steg. Att förstå hur de fungerar i Odoo ORM, hur man skapar dem med Studio eller Python, och när man ska använda dem istället för Float eller Monetary är en del av vad som gör en Odoo-implementering solid och underhållbar.
Om du arbetar med en Odoo-anpassning och vill säkerställa att din datamodell byggs på rätt sätt från början, lönar sig denna typ av grundläggande kunskap under hela projektets livslängd.
Arbeta med en Odoo-expert
På Dasolo hjälper vi företag att implementera, anpassa och optimera Odoo över alla moduler och branscher. Oavsett om du behöver designa en ren datamodell, bygga anpassade fält och arbetsflöden, eller koppla Odoo till externa system via API:et, har vi erfarenheten för att göra det rätt.
Om du har frågor om din Odoo-installation eller vill diskutera ett projekt, kontakta vårt team. Vi hjälper gärna till.