Innledning
Hver skjema i Odoo består av mange felt. Noen må fylles ut hver gang, men mange kan forhåndsutfylles med en rimelig standardverdi slik at brukeren starter med noe meningsfullt. Mekanismen for standardverdier virker enkel, men skjuler flere lag som er nyttige å forstå når du finjusterer skjemaer for teamet ditt.
Enten du er en superbruker som endrer felt via Odoo Studio eller en utvikler som jobber med modultilpasning, sparer kunnskap om standardverdier tid og hindrer subtile konfigurasjonsfeil som er vanskelige å finne senere.
Denne veilederen forklarer hva standardverdier er i Odoo, hvordan de håndteres i ORM, når du bør velge faste kontra dynamiske verdier, og hvordan du setter dem via Studio eller i kode.
Hva er en standardverdi i Odoo?
I Odoo betyr standardverdi det som blir satt i et felt når en ny post opprettes, før brukeren gjør noe. Det er ikke et påbud—brukeren kan alltid endre det. Formålet er å gi en nyttig startverdi som gjør skjemaet mer effektivt i praksis.
Standardinnstillinger kan brukes på nesten alle felttyper: tekstfelt, tall, ja/nei-felt, datoer, relasjoner, valgfelt og flere. De kan være en konkret verdi, en funksjon som kjøres ved opprettelse, eller en metode som returnerer verdien — alt avhengig av behovet.
I Odoo Studio finner du feltets standardverdi i egenskapspanelet. Forretningsbrukere kan sette en statisk standard helt uten koding, noe som er en lavterskel måte å øke datakonsistens på uten å involvere utviklere.
Standardverdier ligger ikke i selve kolonneverdien i databasen. De defineres i Python-modellen eller som oppføringer i ir.default-modellen, avhengig av hvordan du har konfigurert dem. Når en ny post skal opprettes, leser Odoo disse innstillingene og forhåndsutfyller skjemaet før brukeren ser det.
Slik fungerer standardverdier
Når en bruker åpner et nytt skjema, kaller Odoo modellens default_get()-metode. Denne samler standardverdier og returnerer et ord som knytter feltnavn til standardverdier. Skjemaet bruker dette til å vise ferdigutfylte felter ved oppstart.
Det finnes hovedsakelig fire typer standardverdier i Odoo, som løser ulike behov.
Statisk standardverdi
En fast verdi satt i feltdefinisjonen eller via Studio. For eksempel å sette et ja/nei-felt til ja som standard, eller et statusfelt til «utkast». Dette er enklest å forholde seg til og dekker mange daglige behov.
Dynamisk standardverdi (lambda eller metode)
En funksjon som kjøres når posten opprettes. Dette gir mulighet for kontekstavhengige verdier — som dagens dato, gjeldende bruker eller annen informasjon som er tilgjengelig i miljøet når posten lages.
Eksempler på statiske og dynamiske standarder skrives normalt i Python-modellen ved å følge Odoos utviklingsmønster.
I praksis definerer du felt i modellen: et valgfelt med en fast standard, en relasjon som setter gjeldende bruker som ansvarlig, eller et datofelt som bruker dagens dato via en funksjon som kjøres ved opprettelse.
Kontekststyrte standardverdier
Values passed through the action context using the default_field_name convention. When you click Create from inside a related record, Odoo often passes context values that become defaults for relational fields. For example, opening a new task from inside a project automatically sets the project field. This is part of how navigation flows work in the Odoo framework and it is driven entirely by context keys that any developer or advanced user can configure.
Bruker-spesifikke standarder via ir.default
Odoo lar administratorer lagre personlige standarder i ir.default for enkeltbrukere. En slik brukerdefinert standard overstyrer modellens standard for den brukeren, noe som er praktisk når forskjellige ansatte foretrekker forskjellige utgangspunkt ved opprettelse av poster.
Prioritetsrekkefølge
Når flere kilder gir standard for samme felt, avgjøres det slik: først bruker-spesifikke ir.default, deretter selskapsnivå ir.default, så modellens Python-default. Kontekstverdier som sendes ved kjøring kan også overstyre modellstandarder. Å kjenne denne rekkefølgen forklarer ofte hvorfor et felt ikke viser den verdien du forventer.
Praktiske forretningssituasjoner
Standardverdier brukes i alle moduler i Odoo. Her er fem konkrete eksempler fra typiske arbeidsflyter.
CRM: Standard selger på nye leads
Når en selger oppretter en ny salgsmulighet, settes ofte ansvarlig til pålogget bruker som standard. Det sørger for at nye leads ikke blir stående uten ansvar og gjør at brukerne ser sine egne oppgaver umiddelbart — en liten detalj som øker brukermotivasjon og adopsjon.
Salg: Standard betalingsbetingelser på ordre
Ved opprettelse av salgsmelding fylles prislista og betalingsbetingelser ofte inn basert på kundeinnstillingene. En kunde satt opp med 30 dagers betalingsbetingelser får disse forhåndsutfylt, noe som reduserer feil og sikrer at avtalte vilkår blir brukt konsekvent uansett hvem som legger inn ordren.
Lager: Standard lokasjoner ved overføringer
Ved internoverføringer eller justeringer settes ofte kilde- og mållokasjon ut fra lagerets oppsett. Ansatte som jobber i samme sone får rett lokasjon valgt automatisk, noe som sparer tid og minsker risikoen for feil i hektiske situasjoner.
Regnskap: Standard journal på bilag
Når regnskap føres, velger Odoo riktig journal basert på bilagetype og selskapsinnstillinger. Dette gjør at en regnskapsfører ikke trenger å velge journal manuelt hver gang, og at verdien forblir korrekt selv om journaloppsettet endres senere.
Prosjekt: Standard fase på nye oppgaver
En ny oppgave i et prosjekt starter ofte i den første fasen i prosjektets Kanban-oppsett. Hvis oppgaven opprettes fra et bestemt prosjekt, kan konteksten også fylle prosjektreferansen og tildelingen. Dette gjør at oppgaver havner rett fra starten av uten ekstra trinn.
Slik oppretter og tilpasser du standardverdier
Det finnes tre vanlige måter å sette standardverdier på i Odoo: via Studio uten kode, ved å legge dem i Python for tekniske tilpasninger, eller ved å opprette ir.default-oppføringer programmatisk.
Bruke Odoo Studio (uten kode)
Studio gir et visuelt verktøy for å sette standarder på feltene i skjemaene dine. Det er den enkleste måten for forretningsbrukere å gjøre endringer uten utviklerhjelp.
- Åpne Studio på skjemaet du vil endre
- Velg feltet du vil konfigurere
- I feltets egenskaper finner du innstilling for standardverdi
- Skriv inn eller velg ønsket standardverdi
- Lagre og lukk Studio
Studio lagrer dette som en ir.default-oppføring i databasen, vanligvis gjeldende for hele selskapet med mindre en brukerbegrensning settes. Dette er svært nyttig for statiske standarder i typiske felt som valg, ja/nei, tekst eller tall. For relasjonsfelt kan du velge et eksisterende register direkte i Studio.
Husk at når du endrer standard i Studio, påvirker det kun nye poster som opprettes etter endringen — eksisterende poster oppdateres ikke automatisk.
Bruke Python ved teknisk tilpasning
I mer tekniske tilpasninger setter du standardene i feltdefinisjonen i modellen. Dette gir full kontroll over både faste og dynamiske standarder, og er riktig valg når standarden avhenger av kjøretilstand som bruker, dato eller selskap.
Eksempel på hvordan flere typer standarder kan legges i en egen modul:
I en salgsordre-modell kan du for eksempel sette et boolean-felt som standard til false, et leveringspreferanse-felt til «standard», og et tekstfelt som henter en standardtekst fra konfigurasjon via en metode som returnerer verdien ved opprettelse.
Mønsteret med metodebaserte standarder er spesielt nyttig når logikken krever mer enn en enkel lambda og følger Odoos konvensjoner for feltdefinisjon.
Opprette ir.default-oppføringer programmert
Du kan også opprette eller oppdatere ir.default-oppføringer via XML-RPC, i modulens datafiler eller gjennom installasjonsrutiner. Dette er nyttig når du vil levere standardkonfigurasjon med en modul og sørge for at installerte systemer starter med fornuftige verdier.
Denne metoden brukes sjeldnere i daglig utvikling, men er aktuell når du bygger ferdige moduler som skal sette opp standarder automatisk ved installasjon.
Gode vaner ved bruk av standardverdier i Odoo
Gi standardverdier på påkrevde felt
Hvis et felt er påkrevd, gi det en fornuftig standard der det er mulig. Dette reduserer friksjon og hindrer lagringsfeil når brukere forsøker å opprette poster uten å forstå at et felt er obligatorisk. Kombinasjonen required=True med en praktisk default er ofte en god løsning.
Bruk lambda for datoer
Ikke hardkod datoer som standard — bruk for eksempel lambda self: fields.Date.today() slik at standarden alltid er dagens dato ved opprettelse. En fast dato blir umiddelbart utdatert og fører til feil i praksis.
Hold logikken i standardene lettvekts
Standardfunksjoner kjører ved opprettelse — altså når brukeren åpner et nytt skjema. Unngå tunge database-spørringer, eksterne API-kall eller komplekse beregninger i disse funksjonene. Hvis du trenger mer arbeid, vurder onchange eller beregnede felt som trigges etter at brukeren samhandler med skjemaet.
Bruk kontekst for navigasjonsflyt
When building custom actions or smart buttons that open a new form, pass default_field_name values through the action context rather than relying on static model defaults. This is exactly how native Odoo buttons work and keeps your odoo customization aligned with the framework conventions.
Test standarder med forskjellige brukerprofiler
Dynamiske standarder som bruker self.env.user eller self.env.company oppfører seg ulikt avhengig av hvem som er logget inn. Test alltid med flere brukere og, ved multi-selskap, med ulike selskapsoppsett. Det som virker for en administrator kan gi overraskelser for en vanlig bruker.
Vanlige fallgruver
Unngå muterbare objekter som standardverdi
Aldri bruk default=[] eller default={} direkte — Python deler samme liste eller ordbok mellom alle instanser, noe som kan føre til at data lekkes mellom poster. Bruk i stedet default=lambda self: [] for å skape et nytt objekt hver gang.
Standardverdier trigger ikke onchange
Når et felt får en forhåndsutfylt standard, vil ikke onchange-metoder kjøre automatisk. Hvis skjemaet ditt stoler på onchange for å fylle andre felt, må du enten kalle onchange eksplisitt i en egen default_get-overstyring eller håndtere logikken på annen måte.
Konflikter mellom ir.default og modelldefinisjon
Hvis du både setter en standard i Python og via Studio (som bruker ir.default), vil ir.default-verdien få forrang. Dette er en vanlig årsak til forvirring når en Studio-endring overstyrer en teknisk standard uten tydelig varsling.
Å anta at en standard betyr et påkrevd felt
At et felt har en standard betyr ikke at det er obligatorisk. Brukeren kan fjerne verdien og lagre et tomt felt. Hvis feltet alltid må ha en verdi, kombiner standarden med required=True.
Hardkoding av bruker- eller selskaps-IDer
Referanser som default=1 er skjøre og vil ofte feile i andre miljøer hvor ID-ene er forskjellige. Bruk dynamiske referanser som lambda self: self.env.company.id eller lambda self: self.env.ref('modul.xml_id').id for robusthet.
Oppsummering
Standardverdier er en liten, men effektiv del av Odoos datamodell. De fjerner manuelt arbeid, leder brukere mot konsekvente valg og gjør skjemaene mer brukervennlige. Enten du setter dem via Studio eller som del av teknisk tilpasning, gir riktig bruk bedre Odoo-løsninger.
Hovedpoengene å huske: standarder kjøres kun ved opprettelse, de utløser ikke onchange, flere kilder følger en prioritert rekkefølge, og bruk alltid lambda for muterbare standardobjekter.
Riktig håndtering av standardverdier kan være forskjellen mellom et intuitivt skjema og et som skaper frustrasjon hver gang noen oppretter en ny post. En liten innsats her gir stor gevinst i brukertilfredshet og datakvalitet.
Hos Dasolo hjelper vi bedrifter med å implementere, tilpasse og optimalisere Odoo slik at systemet faktisk støtter deres arbeidsprosesser. Trenger du hjelp med å konfigurere feltstandarder, bygge egendefinerte felt eller designe en datamodell som fungerer for teamet ditt, kan vi bistå. Ta kontakt med oss så tar vi en prat om din Odoo-løsning.