Skip to Content

Domain Fields i Odoo: Full Guide Til Bruk Og Filtrering

Lær hvordan feltet "Domain" fungerer i Odoo, hvor det brukes, og hvordan du utnytter det i datamodellen og ved tilpasninger
6. mars 2026 etter
Domain Fields i Odoo: Full Guide Til Bruk Og Filtrering
Dasolo
| No comments yet

Hvis du har jobbet med Odoo en stund, har du sannsynligvis sett uttrykk som inneholder mange hakeparenteser og betingelser. De dukker opp overalt — i automatiseringer, tilgangsregler, handlinger og e-postmaler. Mindre kjent er at Odoo også har en egen feltklasse i ORM-en som er utviklet for å lagre akkurat denne typen filterlogikk: fields.Domain, et felt som behandler domene-uttrykk som strukturerte data fremfor ren tekst.


Å forstå Domain-feltet er nyttig både for utviklere som lager tilpassede moduler og for superbrukere som setter opp arbeidsflyter. Denne gjennomgangen forklarer hva feltet faktisk lagrer, hvordan det brukes i praksis, og gir tips for implementering og hva du bør unngå.

Hva er Domain-feltet i Odoo


I Odoo betyr «domene» en liste med filterbetingelser som brukes for å hente ut oppføringer. Domener bygges opp av tupler og logiske operatorer, og når Odoo kjører en spørring blir disse oversatt til SQL WHERE-klausuler som bestemmer hvilke rader som skal returneres.

Et domene uttrykt i praksis kan for eksempel se slik ut:


[('customer_rank', '>', 0), ('active', '=', True)]

Dette betyr i klartekst: hent alle oppføringer der kunde-rangeringen er større enn 0 OG posten er aktiv.


Domain-feltet (fields.Domain) er en spesiell felt-type i Odoo som lagrer slike domene-uttrykk inne i en post. I motsetning til et vanlig tekstfelt, gir det validering ved lagring og en egen brukergrensesnitt-widget som lar forretningsbrukere bygge filtre visuelt uten å skrive kode.


Hvordan det vises i grensesnittet

I Odoo vises et Domain-felt som standard med en domene-editor. Den gir en visuell reglerbygger hvor brukeren velger felt, operator (er lik, inneholder, større enn osv.) og verdi. Det samme verktøyet finner du når du definerer tilgangsregler, automatiseringer eller lagrer søk.


I databasen lagres domenet som ren tekst — nærmere bestemt som strengrepresentasjonen av en Python-liste. Feltdefinisjonen tar seg av serialisering og validering slik at utviklere får et konsistent domeneobjekt i Python mens lagringslaget håndterer formatet bak kulissene.

Dette er et eksempel på Odoos datamodell-tenkning: felt er mer enn bare felt — de bærer både lagring, validering og UI-atferd i én deklarasjon.

Slik fungerer feltet


Hvordan Domain-feltet henger sammen med ORM og filtrering


Når du lagrer eller evaluerer et domene, skjer flere steg i Odoo: serialisering til tekst, sikker evaluering av uttrykket og oversetting til en SQL-klausul som ORM-en kan bruke.

Lagring og representasjon

Når et domene lagres blir det skrevet som en serielisert streng. Variabler som uid løses først ved kjøring, slik at domenet kan være dynamisk — for eksempel «kun poster for gjeldende bruker». Odoo bruker safe_eval for å evaluere strengen på en kontrollert måte før den konverteres til SQL.


Domene-widgeten

I brukergrensesnittet benytter et fields.Domain-felt standard domene-widget. Den lar brukeren bygge sammensatte filterbetingelser med AND/OR-logikk og gir ofte mulighet for å forhåndsvise resultatsett uten å skrive et eneste tegn med kode.

Det er widgeten som gjør domenefelt brukervennlige for ikke-utviklere. Du trenger ikke kunne domene-syntaksen — UI-en gjør jobben med å omsette visuelle valg til korrekte uttrykk.


Modellkontekst

Et domenefelt kan knyttes til en modell slik at widgeten vet hvilke felt som er tilgjengelige i byggeprosessen. Det settes via model_field-attributtet i feltdeklarasjonen. Uten denne konteksten faller widgeten tilbake til et enkelt tekstfelt, som ikke gir samme brukervennlighet.


Denne koblingen mellom feltdefinisjon og UI er kjerne i hvordan Odoo tilpasser skjermbilder basert på datamodellen — feltet «vet» hva det skal filtrere, og grensesnittet justerer seg deretter.


Samspill med andre oppføringer

Domener brukes ofte sammen med relasjonsfelt for å begrense hvilke oppføringer som vises i en Many2one-liste, hvilke poster en automatisert handling rettes mot, eller hva som inngår i en rapport. Siden filtreringen skjer på ORM-nivå, blir også Odoos tilgangsregler og sikkerhetsbegrensninger respektert.

Forretningsscenarier


Domene-felt finnes i praktisk talt alle Odoo-moduler. Følgende fem eksempler viser typiske bruksområder i en virksomhet.


1. Automatiseringer og e-postutløsere

Når du lager en automatisering (Innstillinger > Teknisk > Automatisering), bruker du et domene for å definere hvilke poster som skal utløse handlingen. For eksempel kan en e-post om forfalte fakturaer være begrenset til bokførte, ubetalte fakturaer med forfallsdato passert. Dette domenet lagres på base.automation i feltet filter_domain og bestemmer når handlingen kjøres.


2. Record rules og tilgangsstyring

Sikkerhetsregler i Odoo benytter domener for å avgrense hvilke poster en brukergruppe kan se eller endre. En salgsregel kan for eksempel begrense synlighet til poster som tilhører brukerens team — evaluert ved spørringstid. På den måten får du radnivå-sikkerhet uten å skrive ekstra kode.


3. Lager og operasjoner

I lagerstyring brukes domener for å målrette handlinger mot spesifikke produktkategorier, lokasjoner eller beholdningsnivåer. En automatisk påfyllingsregel kan for eksempel kjøre kun for lagervare med tilgjengelig mengde under ombestillingspunktet, og unngå unødvendig behandling av tusenvis av varer.


4. CRM-pipeline og kvalifisering av leads

I CRM benyttes domener til å styre automatisk flyt mellom salgssteg, aktivitetstyper og tildeling av leads. En tilpasset tildelingsregel kan matche leads basert på land, bransje eller forventet deal-størrelse slik at hvert lead havner hos riktig selger uten manuell inngripen.


5. Dynamiske Many2one-lister

På skjemaer kan du bruke et domene på en Many2one for å begrense hvilke valg brukeren får. For eksempel å vise kun aktive leverandører med leverandørrangering over null. Domenet kan referere til andre felter i samme skjema, slik at valglisten oppdateres dynamisk avhengig av brukerens input.

Opprette eller tilpasse feltet


To hovedveier for å jobbe med Domain-felt: enten bruke Odoo Studio for rask konfigurasjon uten kode, eller legge feltet inn i en egen modul ved hjelp av Python og XML.


Bruke Odoo Studio

Odoo Studio tilbyr ikke alltid et eksplisitt Domain-felt i den visuelle feltbyggeren, men i praksis trenger de fleste brukere ikke en slik egen felt-type. De innebygde domene-editorene i automatiseringer, record rules og server handlinger gir en fullverdig visuell opplevelse uten å kreve utvikling.

Hvis du vil sette et domene på en Many2one i Studio, kan du redigere feltets egenskaper og skrive domeneuttrykket direkte. Studio validerer syntaksen og lagrer uttrykket i visningsdefinisjonen.


Teknisk tilpasning i Python

I en egen modul er det enkelt å legge inn et Domain-felt ved å følge Odoos vanlige utviklingsmønstre. Feltet deklareres i modellen, og du kan knytte det til et felt som inneholder modellnavnet som skal filtreres.

from odoo import models, fields

class MyModel(models.Model):
    _name = 'my.model'

    model_name = fields.Char(default='res.partner')
    filter_domain = fields.Domain(
        string='Filter Domain',
        model_field='model_name',
        help='Domain expression to filter partner records'
    )

I eksemplet ovenfor gir model_field informasjon til domene-widgeten om hvilken modell den skal vise felt fra. Ved å ha modellnavnet i et eget felt kan du også gjøre domenet dynamisk hvis det er behov for det.


Legge widgeten inn i en formvisning

For å vise domene-editoren i et skjema må både modellfeltet og domenefeltet refereres i XML-visningen, og widgeten må settes eksplisitt.


<field name="model_name" invisible="1"/>
<field name="filter_domain" widget="domain"
       options="{'model': 'model_name'}"/>

Uten widget="domain" og model-alternativet vises feltet som vanlig tekst. Husk alltid å inkludere begge for å gi brukeren den visuelle byggeopplevelsen.


Skrive domeneverdier via XML-RPC API

Når du setter domenefelt programmatisk via API, må verdien sendes som en streng.

models.execute_kw(db, uid, api_key, 'my.model', 'write',
    [[record_id], {
        'filter_domain': "[('active', '=', True)]"
    }]
)

Å sende en faktisk Python-liste i stedet for en streng er en vanlig feil som fører til typefeil eller stille feil, avhengig av Odoo-versjon. Serialiser domenet til en streng før du skriver det gjennom API-et.

Gode framgangsmåter


Følgende praksiser sparer tid og reduserer feil ved arbeid med domain-felt.


Valider domenesyntaks før utrulling

Et ugyldig domene gir feilmeldinger når Odoo prøver å evaluere det. Test domenet i søkefeltet eller i utviklermodus før du lagrer det i automatiseringer eller record rules. Et raskt search_count-kall via API gir også trygghet om at domenet returnerer forventet antall poster.


Bruk dynamiske variabler der det er mulig

Unngå å hardkode bruker- eller selskaps-ID-er og datoer i domener. Bruk i stedet variabler som uid, context_today() eller current_company_id for å gjøre domenene flyttbare og mer robuste mellom miljøer.


Alltid bind modellkonteksten

Når du legger et Domain-felt til en modell, sett model_field og eksponer det i visningen. Uten denne bindingen vil brukeren møte et tekstfelt i stedet for den visuelle editoren, noe som øker risikoen for feil.


Hold domenene lesbare

Sterkt sammensatte domener med mange | (OR) og & (AND) blir lett uoversiktlige. Kommenter intensjonen i koden, og vurder å bruke serverhandlinger eller beregnede felt hvis logikken blir for kompleks for et enkelt domene.


Bruk safe_eval ved programmatisk evaluering

Når du evaluerer domenestrenger i kode, for eksempel i serverhandlinger, bruk Odoos safe_eval i stedet for Python sin eval. Den er sikrere, forstår Odoo-kontekstvariabler og samsvarer med hvordan systemet ellers evaluerer domener.


Test med realistiske data

Bekreft alltid at domenet treffer de forventede postene før du setter det i produksjon — spesielt for automatiseringer og sikkerhetsregler. Et feilaktig domene kan enten gjøre at handlinger kjører på gale poster eller at brukere mister tilgang uten å få beskjed.

Vanlige fallgruver


Vanlige feilfolk gjør (og hvordan unngå dem)


Forveksling mellom felt-type og domene-syntaks

Begrepet «domene» dekker både filternotasjonen og selve felt-typen fields.Domain. Mange som er nye i Odoo-tilpasning blander disse: fields.Domain er lagringsobjektet, mens domeneuttrykket er logikken som ligger inni.


Sende liste i stedet for streng via API

Husk å sende domenet som streng når du skriver via XML-RPC. Å sende en ekte Python-liste vil ofte gi feil eller uventet oppførsel i ulike Odoo-versjoner.


Manglede modellkontekst i widgeten

Hvis du legger et domenefelt i et skjema uten options som peker på modellfeltet, får brukeren et tekstfelt i stedet for den visuelle domene-editeren. Dette gir dårlig UX og øker risikoen for ugyldige verdier.


Hardkodede post-ID-er i domener

Domener som peker direkte på spesifikke post-ID-er bryter ofte når postene slettes eller når du migrerer oppsettet til en annen database. Bruk dynamiske referanser der det er mulig.


For vide eller for snevre record rules

En for permissiv record rule kan eksponere data som burde være skjult; en for streng regel kan skjule poster uten varsel. Test alltid reglene med vanlige brukerroller, ikke bare som administrator.


Å glemme arkiverte poster

Som standard ekskluderer Odoo arkiverte poster (active = False) fra søk. Hvis du trenger arkiverte poster med i resultatet, inkluder uttrykk som ('active', 'in', [True, False]) i domenet.

Oppsummering


Domain-felt er en grunnleggende byggeblokk i Odoo som driver mye av plattformens filtrering. Fra tilgangsstyring og automatiseringer til dynamiske dropdowns og dashboards — domenene utgjør ryggraden i hvordan oppføringer velges, og fields.Domain gir en ryddig, validerbar måte å lagre denne logikken i datamodellen.


For forretningsbrukere gjør domene-widgeten det mulig å sette opp filtrering uten kode. For utviklere skaper fields.Domain tydeligere modell-definisjoner enn å bruke generiske Char-felt med widget-overrides. Enten du jobber i Odoo Studio, utvikler moduler i Python eller setter opp automatiseringer fra UI, åpner forståelsen av domenefelt mange nyttige muligheter.


Prinsippene i denne guiden gjelder på tvers av Odoo-versjoner og moduler. Å investere tid i å forstå domenefelt gir stor avkastning, fordi de finnes overalt i systemet.


Trenger du hjelp med Odoo-implementasjonen?

Dasolo hjelper bedrifter å sette opp, tilpasse og optimalisere Odoo etter egne behov. Enten det gjelder automatiseringer, utvikling av moduler eller utnyttelse av eksisterende installasjon, har vårt team kompetansen som hjelper deg videre.

Har du spørsmål om Domain-feltet eller andre deler av Odoo-implementasjonen din, ta kontakt med oss. Vi ser gjerne på oppsettet ditt og gir råd om neste steg.

Domain Fields i Odoo: Full Guide Til Bruk Og Filtrering
Dasolo 6. mars 2026
Share this post
Logg inn to leave a comment