Hoppa till innehåll

Defaultvärden i Odoo-fält — Kompletta guiden för utvecklare

Så fyller du formulärfält automatiskt i Odoo — från fasta värden till kontextstyrda standarder och dynamiska beräkningar
6 mars 2026 av
Defaultvärden i Odoo-fält — Kompletta guiden för utvecklare
Dasolo
| Inga kommentarer ännu

Introduktion


Varje formulär i Odoo består av fält — vissa fyller användaren i varje gång, andra kan förinställas så att formuläret startar i ett vettigt läge. Systemet för standardvärden är enkelt i grunden, men har flera skikt att förstå när du bygger eller anpassar formulär åt ditt team.


Oavsett om du är slutanvändare som justerar ett fält via Odoo Studio eller utvecklare som jobbar med modellfält i Python, sparar kunskap om standardvärden tid och förhindrar tysta konfigurationsfel som kan vara svåra att felsöka senare.


Denna guide förklarar vad standardvärden är i Odoo, hur de hanteras i ORM:en, när du ska välja statiska kontra dynamiska värden och hur du sätter dem via Studio eller med Pythonkod.

Vad är standardvärde i Odoo?


I Odoo:s ORM är ett standardvärde det värde som tilldelas ett fält när en ny post skapas, innan användaren gjort något. Det är ingen begränsning — användaren kan ändra det — utan ett förifyllt startvärde som gör formuläret mer användbart direkt.


Parametern default finns för nästan alla fälttyper: Char, Integer, Float, Boolean, Date, Many2one, Selection med flera. Den kan vara ett enkelt värde, en Python-lambda eller en referens till en metod — alla är giltiga beroende på behovet.


I Odoo Studio ställer du in standardvärden via fältets egenskaper i gränssnittet. Det låter icke-tekniska användare sätta statiska defaults utan kod, vilket är ett snabbt sätt att höja datakvaliteten och en av de mest tillgängliga förbättringarna i Studio.


Standardvärden lagras inte i kolumnen för fältet i databasen. De finns antingen i Python-modellens definition eller som ir.default-poster i databasen beroende på hur de skapats. När en ny post initieras läser Odoo in dessa värden och förifyller formuläret innan användaren ser det.

Hur standardvärden fungerar


När en användare öppnar ett nytt formulär anropar ramverket modellens default_get(). Den samlar in alla defaults och returnerar en ordbok som mappar fältnamn till deras förinställda värden. Formuläret förifylls sedan med det som metoden returnerat.

Det finns fyra vanliga kategorier av standardvärden i Odoo, varje med sin typiska användning.


Statiska standardvärden

Ett oföränderligt värde som hårdkodas i fältdefinitionen eller sätts via Studio — till exempel en Boolean som är True eller en Selection som standardiseras till 'draft'. Dessa täcker många dagliga behov i en Odoo-implementation.


Dynamiska standardvärden via lambda eller metod

En Python-funktion eller lambda som körs vid skapandet av posten och kan ta hänsyn till kontext som datum, inloggad användare eller företag. Exempelvis att sätta den som skapar posten som ansvarig, eller att ta dagens datum som dokumentdatum.


Så här kan statiska och dynamiska defaults se ut i en Python-modell enligt Odoo:s utvecklingsmönster:


from odoo import fields, models

class CrmLead(models.Model):
    _inherit = 'crm.lead'

    # Statisk default
    x_priority_level = fields.Selection(
        [('low', 'Low'), ('medium', 'Medium'), ('high', 'High')],
        string='Priority Level',
        default='medium',
    )

    # Dynamisk default: aktuell användare
    x_assigned_by = fields.Many2one(
        'res.users',
        string='Assigned By',
        default=lambda self: self.env.user,
    )

    # Dynamisk default: dagens datum
    x_expected_date = fields.Date(
        string='Expected Close Date',
        default=lambda self: fields.Date.today(),
    )

Kontextbaserade standardvärden

Värden kan skickas via action-kontexten med mönstret default_field_name. När du skapar en post från en relaterad vy skickar Odoo ofta sådana kontextnycklar — till exempel att en ny uppgift ska öppnas med projektfältet ifyllt. Det är ett vanligt sätt att styra förifyllning beroende på varifrån formuläret öppnas.


Användarspecifika defaults via ir.default

Odoo låter administratörer ställa in användar- eller företagspecifika defaults med ir.default-poster. En sådan personlig preferens går före modellens standard och är praktisk i miljöer där olika användare vill ha olika startvärden.


Prioriteringsordning

När flera källor finns för samma fält avgör Odoo standarden i följande ordning: användarspecifik ir.default först, sedan företagsnivå i ir.default, och sist modellens Python-default. Kontextvärden som skickas vid körning kan också överstyra modellnivån. Att känna till denna ordning hjälper när ett fält inte visar det du väntat dig.

Affärsscenarier där standardvärden hjälper


Standardvärden används i nästan alla moduler. Här är fem konkreta scenarier där de gör vardagen enklare.


CRM: Förifylld säljare på nya leads

När en säljare skapar ett nytt lead sätts ofta ansvarig till den inloggade användaren som standard. Det gör att leads inte blir oadresserade och minskar behovet av manuell tilldelning — en enkel åtgärd som ökar användaracceptansen i CRM.


Försäljning: förvalda betalningsvillkor på order

Vid skapande av en försäljningsorder hämtas ofta prislista och betalningsvillkor från kundkortet. En kund som har Net 30 får automatiskt dessa villkor på nya ordrar, vilket minskar fel och säkerställer att kundens avtalade villkor används konsekvent.


Lager: standardplatser vid överföringar

Vid interna överföringar eller inventeringsjusteringar förifylls källa och destinationsplatser från lagerinställningarna. Lagerpersonalen sparar tid och risken att välja fel plats minskar eftersom de vanliga valen redan finns ifyllda.


Redovisning: förvald journal på verifikationer

När en användare skapar en faktura eller leverantörsfaktura väljs journal automatiskt utifrån typ och företagsinställningar. Det innebär att en redovisningsansvarig inte varje gång behöver välja rätt journal manuellt — systemet använder företagets konfiguration dynamiskt.


Projekt: förvald fas på nya uppgifter

När en ny uppgift skapas inom ett projekt hamnar den i projektets första steg i kanbanflödet. Om uppgiften skapas från ett särskilt projekt skickas även det projektet i kontexten och ibland även ansvarig. Så hålls arbetsflödet ordnat från första stund.

Skapa och anpassa standardvärden


Det finns tre vanliga sätt att sätta standardvärden i Odoo — från enkla no-code-lösningar i Studio till full kontroll i en Python-modul.


Använda Odoo Studio (ingen kod)

Studio erbjuder ett visuellt sätt att ställa in defaults för fält i dina formulär. Stegen är enkla och kräver ingen programmering.

  • Öppna Studio på det formulär du vill ändra
  • Klicka på fältet du vill konfigurera
  • Hitta fältets egenskapsfönster till höger
  • Ange eller välj det värde du vill ska vara standard
  • Spara och avsluta Studio

Studio sparar ändringen som en ir.default-post i databasen och gäller normalt för hela företaget om inte en användarbindning specificerats. Metoden är särskilt lämplig för statiska defaults på Selection, Boolean, Char och Integer, och för Many2one kan du välja en befintlig post från en lista — perfekt när du vill skapa fält utan att skriva kod.

Tänk på att ändringar via Studio bara påverkar poster som skapas efter ändringen — befintliga poster uppdateras inte automatiskt.


Använda Python för tekniska anpassningar

I tekniska anpassningar sätter du defaults i fältdefinitionen i Python. Det ger total kontroll över statiska, lambda-baserade och metodbaserade defaults, och är rätt väg när värdet måste bestämmas dynamiskt vid körning.


Här är ett exempel på hur flera typer av defaults kan se ut i en custom-modul:


from odoo import fields, models

class SaleOrder(models.Model):
    _inherit = 'sale.order'

    # Statisk Boolean default
    x_requires_review = fields.Boolean(
        string='Requires Review',
        default=False,
    )

    # Statisk Selection default
    x_delivery_preference = fields.Selection(
        [('standard', 'Standard'), ('express', 'Express')],
        string='Delivery Preference',
        default='standard',
    )

    # Dynamisk default via metod
    def _default_note(self):
        return self.env['ir.config_parameter'].sudo().get_param(
            'sale.default_note', default=''
        )

    x_internal_note = fields.Text(
        string='Internal Note',
        default=_default_note,
    )

Detta följer Odoo:s etablerade Python-mönster och fungerar för alla fälttyper. Metodbaserade defaults är användbara när logiken är mer komplex än vad en lambda klarar av.


Programmatisk hantering av ir.default-poster

Du kan skapa eller uppdatera ir.default-poster via XML-RPC eller i modulens datafiler. Det är praktiskt när du vill paketera standardskonfiguration i en modul som ska installeras i flera system.


Denna metod är mindre vanlig i dagligt utvecklingsarbete men användbar vid distribution av färdiga konfigurationer som en del av en modul.

Bra principer för standardvärden i Odoo


Sätt defaults på obligatoriska fält

Om ett fält är obligatoriskt — ge det ett vettigt default där det är möjligt. Det minskar friktion och sparar användaren från felmeddelanden när ett formulär sparas. Kombinationen required=True och ett praktiskt default fungerar bra i många scenarier.


Använd lambda för datumdefaults

Hårdkoda aldrig ett datum som default. Använd lambda self: fields.Date.today() så att värdet alltid motsvarar den dag posten skapas. Ett statiskt datum blir snabbt fel och ger dålig användarupplevelse.


Håll default-logiken lättviktig

Default-metoder körs varje gång ett formulär initieras. Undvik tunga databasfrågor, externa API-anrop eller komplexa beräkningar i dem. Om logiken kräver mer arbete, överväg ett onchange eller beräknat fält som triggas senare istället.


Använd kontextdefaults för navigationsflöden

När du bygger specialknappar eller actions som öppnar formulär — skicka default_field_name i action-kontexten istället för att förlita dig på modeller. Det är samma mönster Odoo använder inbyggt och gör dina anpassningar mer robusta.


Testa defaults med olika användarprofiler

Dynamiska defaults som refererar till self.env.user eller self.env.company beter sig olika beroende på vem som är inloggad. Testa alltid med minst två konton och, vid multi-company, med flera företagskonfigurationer.

Vanliga fallgropar


Att använda ett ändringsbart objekt som default

Vanliga Python-fällan: skriv aldrig default=[] eller default={}. Det leder till delade objekt mellan poster. Använd istället en lambda: default=lambda self: [] så skapas ett nytt objekt för varje post.


Defaults triggar inte onchange

Ett standardvärde aktiverar inte onchange-metoder. Om du har logik kopplad till onchange för ett fält kommer den inte köra när värdet bara förifylls. Behöver du onchange-effekten vid initiering måste du explicit anropa den i en default_get-override eller hantera logiken på annat sätt.


Konflikter mellan ir.default och modelldefinition

Om du sätter samma default både i Python och via Studio/ir.default så vinner ir.default. Detta är en vanlig orsak till att ett fält visar oväntat värde efter en Studio-ändring.


Förutsätta att ett default betyder obligatoriskt

Ett fält med ett default blir inte automatiskt obligatoriskt — användaren kan radera värdet. Om fältet alltid måste ha värde, kombinera default med required=True.


Hårdkoda inte användar- eller företags-ID:n

Att skriva default=1 för en användare eller företag är bräckligt — ID:n varierar mellan databaser. Använd istället dynamiska referenser som lambda self: self.env.company.id eller lambda self: self.env.ref('module.xml_id').id.

Sammanfattning


Standardvärden är små men kraftfulla byggstenar i Odoo. De minskar manuellt arbete, leder användarna mot konsekventa val och gör formulär enklare att använda — oavsett om du sätter dem snabbt i Studio eller definierar dem i Python i en teknisk anpassning.


Sammanfattningsvis: defaults körs bara vid skapandet av en post, de triggar inte onchange, flera källor följer en definierad prioriteringsordning, och använd alltid lambda för föränderliga objekt som listor eller dicts.


Rätt hanterade defaultvärden avgör ofta om ett formulär känns intuitivt eller skapar daglig irritation för användarna. En liten ansträngning att få dem rätt återbetalar sig många gånger om.


På Dasolo hjälper vi företag att implementera, anpassa och optimera Odoo så att systemet matchar deras arbetsflöden. Behöver ni stöd med fältdefaults, nya fält eller att designa en datamodell som verkligen funkar för teamet så hjälper vi gärna till. Kontakta oss så tar vi ett samtal om er Odoo-implementation.

Defaultvärden i Odoo-fält — Kompletta guiden för utvecklare
Dasolo 6 mars 2026
Dela detta inlägg
Logga in att lämna en kommentar