Hoppa till innehåll

Odoo ORM: computed fields och onchange-metoder

Automatisk beräkning utan att skriva SQL

Odoos ORM (Object-Relational Mapping) hanterar allt mellan Python-koden och databasen. Du skapar fält, definierar beräkningar och Odoo sköter resten. Computed fields och onchange-metoder är två av de mest använda verktygen.

Computed fields

Ett fält vars värde beräknas automatiskt. Totalbelopp = antal * styckpris. I Python: total = fields.Float(compute='_compute_total'). Metoden _compute_total körs varje gång beroende fält ändras.

Använd @api.depends('quantity', 'unit_price') för att ange vilka fält som triggar omberäkning. Odoo optimerar: beräkningen körs bara när ett beroende fält faktiskt ändras, inte vid varje läsning.

Stored computed fields

Lägg till store=True och värdet sparas i databasen. Fördelen: du kan söka, filtrera och gruppera på det. Nackdelen: det tar plats och kräver omberäkning vid ändring. Använd det för fält du behöver i rapporter och listor. Ej stored för fält som bara visas i formulärvyn.

Onchange

@api.onchange('partner_id') triggas i realtid när användaren ändrar fältet i formuläret. Bra för att förifylla relaterade fält: välj kund, fyll automatiskt i adress och betalvillkor. Onchange körs i webbläsaren (client-side) innan posten sparas.

Skillnaden

Computed fields beräknas vid läsning (eller vid beroende ändring om stored). Onchange triggas vid interaktion i formuläret. Computed fields fungerar överallt (API, import, automatisering). Onchange fungerar bara i formulärvyn.

Vanliga misstag

Glömma @api.depends på computed fields (värdet beräknas aldrig om). Använda onchange för affärslogik som borde vara en constraint eller en computed field. Beroendekedjor: A beror på B som beror på C, glöm inte att deklarera hela kedjan.

Odoo E-handel: bygga webbutik i affärssystemet
Produkter, ordrar och lager i ett system