Hoppa till innehåll

Domänfält i Odoo: En Fullständig Guide

Förstå hur fältet Domän fungerar i Odoo, var det förekommer och hur du använder det i din datamodell och anpassningar
6 mars 2026 av
Domänfält i Odoo: En Fullständig Guide
Dasolo
| Inga kommentarer ännu

Om du har spenderat tid på att konfigurera Odoo har du förmodligen stött på domänuttryck. Dessa filtervillkor med hakparenteser dyker upp i åtgärdsknappar, automatiserade regler, postregler och e-postmallar över hela plattformen. Men färre människor inser att Odoo också tillhandahåller en dedikerad domänfältstyp i sin ORM, som är utformad specifikt för att lagra och visa dessa uttryck som strukturerad data.


Att förstå domänfält är viktigt oavsett om du är en Odoo-utvecklare som bygger anpassade moduler eller en affärsanvändare som konfigurerar automatiserade arbetsflöden. Denna guide täcker allt från vad ett domänfält faktiskt lagrar till praktiska exempel, utvecklingstips och de vanligaste misstagen att undvika.

Vad är domänfältet i Odoo


I Odoo är en domän en lista med filtervillkor som används för att fråga poster. Den följer en specifik syntax med hjälp av tupler och logiska operatorer, och den motsvarar direkt SQL WHERE-klausuler när Odoo kör en databasfråga.

Ett typiskt domänuttryck ser ut så här:


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

Det här översätts till: returnera alla poster där customer_rank är större än 0 OCH active är Sant.


Fältet Domain field (fields.Domain) är en fälttyp i Odoo ORM som lagrar dessa uttryck som strukturerad data inuti en post. Till skillnad från ett vanligt textfält kommer det med inbyggd validering och en dedikerad UI-widget som låter användare bygga filtervillkor visuellt, utan att skriva någon kod.


Hur det ser ut i gränssnittet

I Odoo-gränssnittet renderas ett Domain-fält med hjälp av domänredigeringswidgeten som standard. Denna widget presenterar en visuell regelbyggare där användare kan välja ett fält, välja en operator (lika med, innehåller, större än, och så vidare) och ange ett värde. Det är samma gränssnitt som du ser när du konfigurerar åtkomsträttigheter eller filterkriterier i automatiserade åtgärder.


I databasen lagras domänvärden som ren text, specifikt som strängrepresentationen av en Python-lista. Fälttypen hanterar serialisering och validering transparent, så utvecklare arbetar med rena domänvärden i Python medan lagringslagret hanterar resten.

Detta är en del av den bredare designen av Odoo datamodell: fält är inte bara lagringsbehållare. De bär semantisk betydelse, UI-beteende och valideringslogik tillsammans i en enda definition.

Hur fältet fungerar


Domain-fältet integreras tätt med Odoo ORM och postfiltreringssystemet. Här är vad som händer under huven när du sparar och utvärderar en domän.


Lagring och representation

När en domän sparas i databasen lagrar Odoo den som en serialiserad sträng. En domän som begränsar poster till utkastläge för den aktuella användaren lagras som ett textvärde som Odoo utvärderar vid frågetid. Den speciella variabeln uid löses till det aktuella användar-ID:t vid körning, vilket gör dynamisk filtrering möjlig utan att hårdkoda värden.

Odoo ORM tar den strängen, utvärderar den säkert och konverterar den till en SQL WHERE-klausul. Denna utvärdering sker genom safe_eval, som stöder en kontrollerad delmängd av Python-uttryck tillsammans med Odoo-specifika kontextvariabler.


Domänwidgeten

I Odoo-gränssnittet använder fält av typen fields.Domain domänwidgeten som standard. Denna widget presenterar filterbyggaren som du ser på många ställen i Odoo. Användare kan lägga till villkor, kombinera dem med OCH- eller ELLER-logik och förhandsgranska resultat utan att röra vid någon kod.

Widgeten är det som gör domänfält verkligen tillgängliga för affärsanvändare. Du behöver inte förstå domänsyntax för att konfigurera ett filter. Den visuella byggaren hanterar översättningen åt dig.


Modellkontext

Ett domänfält kan kopplas till en specifik modell, vilket berättar för Odoo vilka fält som ska erbjudas i domänbyggaren. Du ställer in detta via model_field-attributet i fältdefinitionen. Utan en modellkontext faller domänwidgeten tillbaka på en vanlig textinmatning, vilket är mycket mindre användbart för slutanvändare.


Denna kontextbindning är en kärnkomponent i hur Odoo-ramverket kopplar fältdefinitioner till UI-beteende. Fältet vet om modellen det filtrerar, och gränssnittet anpassar sig därefter.


Interaktion med andra poster

Domänfält används ofta tillsammans med relationella fält för att begränsa vilka poster som visas i en Many2one-rullgardinsmeny, för att definiera vilka poster en automatiserad åtgärd riktar sig mot, eller för att ställa in omfattningen av en rapport eller instrumentpanel. Domänuttrycket fungerar som ett livefilter som tillämpas på ORM-nivå, vilket innebär att det respekterar Odoo:s säkerhetsregler och fältåtkomstkontroller.

Affärsanvändningsfall


Domänfält förekommer i praktiskt taget varje Odoo-modul. Här är fem verkliga exempel som visar hur de driver praktiska affärsarbetsflöden.


1. Automatiserade åtgärder och e-postutlösare

När du konfigurerar en automatiserad åtgärd i Odoo (Inställningar > Teknisk > Automatisering) definierar du en domän för att specificera vilka poster som utlöser åtgärden. Till exempel kan ett automatiserat e-postmeddelande för förfallna fakturor rikta sig endast mot bokförda fakturor som är obetalda och passerat sitt förfallodatum. Denna domän lagras direkt på base.automation-modellen i ett domänfält som kallas filter_domain. Åtgärden utlöses endast för poster som matchar.


2. Postregler och åtkomstkontroll

Odoo:s säkerhetspostregler använder domänfält för att begränsa vilka poster en användargrupp kan se eller redigera. En regel för säljteamet kan begränsa synligheten till poster som tilldelats det aktuella användarteamet, utvärderat vid frågetid. Detta ger dig radnivåsäkerhet utan att skriva anpassad kod. Varje filter på varje postregel i Odoo är ett domänuttryck som lagras i ett domänfält.


3. Filtrering av lager och operationer

In lager- och inventariehantering använder schemalagda åtgärder och regler för ombeställning domäner för att rikta in sig på specifika produktkategorier, platser eller lagernivåer. En automatiserad påfyllningsåtgärd kan begränsas till lagringsbara produkter med tillgänglig kvantitet vid eller under en ombeställningspunkt, vilket förhindrar onödig bearbetning över tusentals poster.


4. CRM-pipeline och leadkvalificering

I CRM-modulen bygger automatisering av pipeline-steg, aktivitetsregler och leadtilldelning alla på domänuttryck för att kategorisera och kvalificera leads. Anpassade regler för leadtilldelning använder domäner för att matcha leads med rätt säljare baserat på land, bransch eller affärsstorlek. Domänfältet är vad som gör dessa regler konfigurerbara från gränssnittet istället för att kräva kodändringar för varje nytt scenario.


5. Dynamiska Many2one-rullgardinsmenyer

I anpassade formulär kontrollerar en domän som tillämpas på ett Many2one-fält vilka poster som visas i rullgardinsmenyn. Att begränsa ett leverantörsfält till att endast visa aktiva leverantörer med en icke-noll leverantörsrankning skapar mer fokuserade användarupplevelser och minskar inmatningsfel. Domänen kan till och med vara dynamisk, referera till värden från andra fält på samma formulär, vilket gör att de tillgängliga alternativen ändras baserat på användarval.

Skapa eller anpassa fältet


Det finns två huvudsakliga tillvägagångssätt för att arbeta med domänfält i Odoo: att använda Odoo Studio för kodfri anpassning, eller att skriva Python och XML i en anpassad modul.


Använda Odoo Studio

Odoo Studio exponerar för närvarande inte en fristående Domänfältstyp i sin visuella fältsskapare. För de flesta affärskonfigurationsbehov behöver du inte en. De befintliga domänredigerarna som är inbyggda i automatiserade åtgärder, postregler och serveråtgärder ger dig den visuella domänbyggaren utan att kräva ett anpassat fält.

Om du vill lägga till ett domänfilter till ett Many2one-fält på ett formulär kan du göra det i Studio genom att redigera fältets egenskaper och ange ett domänuttryck direkt. Studio validerar domänsyntaxen och lagrar den i vydefinitionen.


Teknisk anpassning i Python

I en anpassad Odoo-modul är det att lägga till ett domänfält en enkel del av den standard odoo utvecklarguiden. Här är ett grundläggande exempel som använder ORM:

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'
    )

Attributet model_field kopplar domänredigeraren till modellnamnet som lagras i model_name. Detta talar om för domänwidgeten vilka fält som ska erbjudas i den visuella byggaren. Att hålla modellnamnet i ett separat fält möjliggör också dynamisk modellval om ditt användningsfall kräver det.


Lägga till widgeten i en formulärvy

För att visa domänbyggaren i en formulärvy, referera både till modellfältet och domänfältet i vy-XML:


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

Utan deklarationen widget="domain" och modellalternativet renderas fältet som vanlig text. Inkludera alltid båda när du bygger formulär som exponerar domänkonfiguration för användare.


Skriva domänvärden via XML-RPC API

Om du ställer in domänfältvärden programmässigt via API, skicka alltid värdet som en sträng:

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

Att skicka ett Python-listobjekt istället för en sträng är ett vanligt misstag som orsakar fel eller tysta misslyckanden beroende på Odoo-versionen. Serialisera alltid din domän till en sträng innan du skriver den genom API.

Bästa praxis


Dessa praktiska vanor kommer att spara tid och förhindra problem när du arbetar med domänfält i Odoo.


Validera domänsyntax innan du distribuerar

Ett ogiltigt domänuttryck ger fel så snart Odoo försöker utvärdera det. Testa dina domäner i Odoo:s sökfält eller i utvecklarläge innan du sparar dem till automatiserade åtgärder eller registreringsregler. Ett snabbt search_count-anrop via API är också ett pålitligt sätt att bekräfta att en domän returnerar det förväntade antalet poster.


Använd dynamiska variabler där det är möjligt

Undvik att hårdkoda användar-ID, företags-ID eller datum i domänuttryck. Använd dynamiska variabler som uid, context_today() och current_company_id istället. Detta gör dina domäner portabla och undviker tyst krasch när poster ändras mellan miljöer.


Bind alltid modellkontexten

När du lägger till ett domänfält i en anpassad modell, ställ alltid in model_field-attributet och inkludera det i vyn. Utan det ser användarna en vanlig textinmatning istället för den visuella domänbyggaren, vilket minskar användbarheten och ökar risken för att ogiltiga värden sparas.


Håll domäner läsbara

Komplexa nästlade domäner som använder | (ELLER) och & (OCH) operatorer kan bli svåra att läsa och underhålla. Lägg till kommentarer i din Python-kod som förklarar avsikten bakom varje domän. Om en domän blir mycket komplex, överväg om en serveråtgärd eller ett beräknat fält skulle vara tydligare och lättare att testa.


Använd safe_eval för programmatisk utvärdering

När du utvärderar domänsträngar i Python-kod, till exempel inuti en serveråtgärd eller automatiserad åtgärd, använd Odoo inbyggda safe_eval istället för Python-nativa eval. Det är säkrare, hanterar Odoo-specifika kontextvariabler korrekt och är konsekvent med hur Odoo utvärderar domäner internt.


Testa med realistiska data

Verifiera alltid att din domän matchar de förväntade posterna innan du går live. Detta är särskilt viktigt för automatiserade åtgärder och postregler, där ett felaktigt filter kan bearbeta fel poster eller blockera användartillgång utan någon synlig varning.

Vanliga fallgropar


Här är de misstag som oftast uppstår när man arbetar med domänfält i Odoo, och hur man undviker dem.


Förväxla fälttypen med domänsyntax

Ordet "domän" betyder två olika saker i Odoo. Det hänvisar till filter-syntaxen (en lista av tupler), och det hänvisar också till fields.Domain, en specifik ORM-fälttyp som lagrar dessa uttryck som data. Nykomlingar till Odoo-anpassning blandar ofta ihop de två. Ett Domänfält är en lagringsbehållare. Domänuttrycket är filterlogiken inuti det.


Att skicka en lista istället för en sträng via API

När du skriver till ett Domänfält via XML-RPC måste du skicka en sträng, inte ett Python-listobjekt. Att skicka domänen som en rå lista kommer att orsaka ett typfel eller tyst misslyckande beroende på Odoo-versionen. Serialisera alltid din domän till en sträng innan du skriver den genom API:et.


Saknad modellkontext på widgeten

Om du lägger till ett Domänfält i en formulärvy utan att specificera modellkontexten i widgetalternativen, kommer användarna att se en vanlig textinmatning istället för den visuella domänbyggaren. Domänbyggaren visas endast när widgeten vet vilken modell den ska referera till. Inkludera alltid model_field-länken i din vydefinition.


Hårdkodning av post-ID:n i domäner

Domäner som refererar till specifika post-ID:n direkt bryter tyst när dessa poster tas bort eller när du kopierar konfigurationen till en ny databas. Använd dynamiska referenser som uid eller relationella uppslag där det är möjligt för att hålla dina domäner portabla.


Överdrivet breda eller restriktiva postregel-domäner

En postregel-domän som är för tillåtande kan exponera poster för användare som inte borde se dem. En som är för restriktiv kan tyst dölja poster utan någon förklaring till användaren. Testa alltid postregel-domäner ur perspektivet av den målgrupp som användaren tillhör, inte admin-kontot som kringgår alla regler.


Att glömma arkiverade poster

Som standard exkluderar Odoo arkiverade poster (där active = False) från sökresultat. Om din domän inte tar hänsyn till detta kan du få oväntade luckor i dina data. Lägg till ('active', 'in', [True, False]) när du behöver inkludera arkiverade poster i filterresultaten.

Slutsats


Domänfält är en av dessa byggstenar som tyst driver en stor del av hur Odoo fungerar. Från åtkomstkontroll och automatiserade åtgärder till dynamiska rullgardinsmenyer och instrumentpanelfilter, är domänuttryck ryggraden i postfiltrering i Odoo, och fields.Domain-typen ger utvecklare ett rent, validerat sätt att lagra och presentera den logiken direkt i Odoo datamodell.


För affärsanvändare gör domänwidgeten filterkonfiguration tillgänglig utan någon kod. För utvecklare ger domänfältstypen tydlighet i modelldefinitioner som tidigare förlitade sig på generiska Char-fält med en widgetöverskrivning. Oavsett om du arbetar i Odoo Studio, skriver en anpassad Python-modul eller konfigurerar automatiserade arbetsflöden från gränssnittet, öppnar förståelsen för hur domänfält fungerar upp en mängd möjligheter.


De koncept som täcks i denna guide gäller för alla Odoo-versioner och moduler. Tiden som läggs på att förstå domänfält är väl investerad tid, eftersom de verkligen finns överallt i Odoo.


Behöver du hjälp med din Odoo-implementering?

Dasolo hjälper företag att implementera, anpassa och optimera Odoo för deras specifika affärsbehov. Oavsett om du sätter upp automatiserade arbetsflöden, bygger anpassade moduler eller försöker få mer ut av din befintliga Odoo-installation, har vårt team den tekniska djupet för att hjälpa dig att gå framåt med självförtroende.

Om du har frågor om domänfält eller någon annan aspekt av din Odoo-implementering, kontakta oss. Vi hjälper gärna till att titta på din installation och vägleda dig i rätt riktning.

Domänfält i Odoo: En Fullständig Guide
Dasolo 6 mars 2026
Dela detta inlägg
Logga in att lämna en kommentar