Overslaan naar inhoud

Domeinvelden in Odoo: Een Uitgebreide Gids

Begrijp hoe het Domein veldtype werkt in Odoo, waar het verschijnt en hoe je het kunt gebruiken in je datamodel en aanpassingen
6 maart 2026 in
Domeinvelden in Odoo: Een Uitgebreide Gids
Dasolo
| Nog geen reacties

Als je enige tijd hebt besteed aan het configureren van Odoo, ben je waarschijnlijk domeinuitdrukkingen tegengekomen. Die filtervoorwaarden met haakjes verschijnen in actieknoppen, geautomatiseerde regels, recordregels en e-mailsjablonen door het hele platform. Maar minder mensen realiseren zich dat Odoo ook een speciaal Domein veldtype in zijn ORM biedt, dat specifiek is ontworpen om deze uitdrukkingen als gestructureerde gegevens op te slaan en weer te geven.


Het begrijpen van domeinvelden is belangrijk, of je nu een Odoo-ontwikkelaar bent die aangepaste modules bouwt of een zakelijke gebruiker die geautomatiseerde workflows configureert. Deze gids behandelt alles, van wat een domeinveld daadwerkelijk opslaat tot praktische voorbeelden, ontwikkelingstips en de meest voorkomende fouten die je moet vermijden.

Wat is het Domeinveld in Odoo


In Odoo is een domein een lijst van filtervoorwaarden die worden gebruikt om records op te vragen. Het volgt een specifieke syntaxis met behulp van tuples en logische operatoren, en het komt direct overeen met SQL WHERE-clausules wanneer Odoo een databasequery uitvoert.

Een typische domeinuitdrukking ziet er als volgt uit:


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

Dit vertaalt naar: retourneer alle records waar customer_rank groter is dan 0 EN active waar is.


Het Domain veld (fields.Domain) is een veldtype in de Odoo ORM dat deze expressies opslaat als gestructureerde gegevens binnen een record. In tegenstelling tot een gewoon tekstveld, komt het met ingebouwde validatie en een speciale UI-widget die gebruikers in staat stelt om filtervoorwaarden visueel op te bouwen, zonder enige code te schrijven.


Hoe het eruitziet in de interface

In de Odoo-interface wordt een Domain veld standaard weergegeven met de domeineditor-widget. Deze widget presenteert een visuele regelbouwer waar gebruikers een veld kunnen kiezen, een operator kunnen selecteren (gelijk aan, bevat, groter dan, enzovoort) en een waarde kunnen invoeren. Het is dezelfde interface die je ziet bij het configureren van toegangsregels of filtercriteria in geautomatiseerde acties.


In de database worden domeinwaarden opgeslagen als platte tekst, specifiek als de stringrepresentatie van een Python-lijst. Het veldtype behandelt serialisatie en validatie transparant, zodat ontwikkelaars werken met schone domeinwaarden in Python terwijl de opslaglaag de rest afhandelt.

Dit maakt deel uit van het bredere Odoo datamodel ontwerp: velden zijn niet alleen opslagcontainers. Ze dragen semantische betekenis, UI-gedrag en validatielogica samen in een enkele definitie.

Hoe het Veld Werkt


Het Domain veld integreert nauw met de Odoo ORM en het recordfilteringssysteem. Dit is wat er achter de schermen gebeurt wanneer je een domein opslaat en evalueert.


Opslag en representatie

Wanneer een domein in de database wordt opgeslagen, slaat Odoo het op als een geserialiseerde string. Een domein dat records beperkt tot de conceptstatus voor de huidige gebruiker wordt opgeslagen als een tekstwaarde die Odoo evalueert op het moment van de query. De speciale variabele uid wordt tijdens runtime opgelost naar de huidige gebruikers-ID, waardoor dynamische filtering mogelijk is zonder waarden hardcoded in te voeren.

De Odoo ORM neemt die string, evalueert deze veilig en converteert deze naar een SQL WHERE-clausule. Deze evaluatie gebeurt via safe_eval, dat een gecontroleerde subset van Python-expressies ondersteunt samen met Odoo-specifieke contextvariabelen.


De domeinwidget

In de Odoo-interface gebruiken velden van het type fields.Domain standaard de domeinwidget. Deze widget presenteert de filterbouwer die je in veel delen van Odoo ziet. Gebruikers kunnen voorwaarden toevoegen, deze combineren met EN- of OF-logica en resultaten bekijken zonder enige code aan te raken.

De widget maakt domeinvelden echt toegankelijk voor zakelijke gebruikers. Je hoeft geen domeinsyntax te begrijpen om een filter te configureren. De visuele bouwer verzorgt de vertaling voor je.


Modelcontext

Een domeinveld kan worden gekoppeld aan een specifiek model, dat Odoo vertelt welke velden in de domeinbouwer moeten worden aangeboden. Je stelt dit in via de model_field attribuut in de velddefinitie. Zonder een modelcontext valt de domeinwidget terug op een platte tekstinvoer, wat veel minder nuttig is voor eindgebruikers.


Deze contextbinding is een essentieel onderdeel van hoe het Odoo-framework velddefinities verbindt met UI-gedrag. Het veld weet van het model dat het filtert, en de interface past zich dienovereenkomstig aan.


Interactie met andere records

Domeinvelden worden vaak gebruikt naast relationele velden om te beperken welke records verschijnen in een Many2one dropdown, om te definiëren welke records een geautomatiseerde actie richt, of om de reikwijdte van een rapport of dashboard in te stellen. De domeinexpressie fungeert als een live filter dat op het ORM-niveau wordt toegepast, wat betekent dat het de Odoo-beveiligingsregels en veldtoegangscontroles respecteert.

Zakelijke Gebruikscases


Domeinvelden komen in vrijwel elke Odoo-module voor. Hier zijn vijf voorbeelden uit de praktijk die laten zien hoe ze praktische bedrijfsworkflows aansteken.


1. Geautomatiseerde acties en e-mailtriggers

Wanneer je een geautomatiseerde actie in Odoo configureert (Instellingen > Technisch > Automatisering), definieer je een domein om aan te geven welke records de actie activeren. Bijvoorbeeld, een geautomatiseerde e-mail voor achterstallige facturen kan alleen gericht zijn op geposte facturen die onbetaald zijn en hun vervaldatum hebben overschreden. Dit domein wordt rechtstreeks opgeslagen op het base.automation model in een domeinveld genaamd filter_domain. De actie wordt alleen uitgevoerd voor records die overeenkomen.


2. Recordregels en toegangscontrole

Odoo-beveiligingsrecordregels gebruiken domeinvelden om te beperken welke records een gebruikersgroep kan zien of bewerken. Een regel voor het verkoopteam kan de zichtbaarheid beperken tot records die zijn toegewezen aan het huidige gebruikers team, geëvalueerd op het moment van de query. Dit geeft je beveiliging op rijniveau zonder aangepaste code te schrijven. Elke filter op elke recordregel in Odoo is een domeinexpressie die is opgeslagen in een domeinveld.


3. Voorraad- en operationele filtering

In magazijn- en voorraadbeheer gebruiken geplande acties en herbestelregels domeinen om specifieke productcategorieën, locaties of voorraadniveaus te targeten. Een geautomatiseerde aanvulactie kan worden beperkt tot opslaarbare producten met een beschikbare hoeveelheid op of onder een herbestelpunt, waardoor onnodige verwerking over duizenden records wordt voorkomen.


4. CRM-pijplijn en leadkwalificatie

In de CRM-module zijn automatisering van pijplijnfasen, activiteitsregels en leadtoewijzing allemaal afhankelijk van domeinexpressies om leads te categoriseren en te kwalificeren. Aangepaste leadtoewijzingsregels gebruiken domeinen om leads te koppelen aan de juiste verkoper op basis van land, sector of dealgrootte. Het domeinveld is wat deze regels configureerbaar maakt vanuit de interface in plaats van dat er voor elk nieuw scenario codewijzigingen nodig zijn.


5. Dynamische Many2one dropdowns

In aangepaste formulieren controleert een domein dat op een Many2one-veld is toegepast welke records in de dropdown verschijnen. Het beperken van een leveranciersveld om alleen actieve leveranciers met een niet-nul leveranciersrang te tonen, creëert meer gerichte gebruikerservaringen en vermindert invoerfouten. Het domein kan zelfs dynamisch zijn, waarbij het verwijst naar waarden uit andere velden op hetzelfde formulier, waardoor de beschikbare opties veranderen op basis van gebruikersselecties.

Een Veld Aanmaken of Aanpassen


Er zijn twee hoofdbenaderingen voor het werken met domeinvelden in Odoo: het gebruik van Odoo Studio voor no-code aanpassing, of het schrijven van Python en XML in een aangepaste module.


Odoo Studio gebruiken

Odoo Studio biedt momenteel geen zelfstandige Domeinveldtype in zijn visuele veldcreator. Voor de meeste zakelijke configuratiebehoeften heb je er geen nodig. De bestaande domeineditors die zijn ingebouwd in geautomatiseerde acties, recordregels en serveracties geven je de visuele domeinbouwer zonder dat er een aangepast veld nodig is.

Als je een domeinfilter wilt toevoegen aan een Many2one-veld op een formulier, kun je dat in Studio doen door de veldinstellingen te bewerken en een domeinexpressie direct in te voeren. Studio valideert de domeinsyntaxis en slaat deze op in de weergave-definitie.


Technische aanpassing in Python

In een aangepaste Odoo-module is het toevoegen van een Domeinveld een rechttoe rechtaan onderdeel van de standaard odoo ontwikkelaarsgids. Hier is een basisvoorbeeld met behulp van de 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 Domein',
        model_field='model_name',
        help='Domeinexpressie om partnerrecords te filteren'
    )

De model_field eigenschap koppelt de domeineditor aan de modelnaam die is opgeslagen in model_name. Dit vertelt de domeinwidget welke velden in de visuele bouwer moeten worden aangeboden. Het behouden van de modelnaam in een apart veld maakt ook dynamische modelselectie mogelijk als uw gebruiksgeval dit vereist.


De widget toevoegen aan een formulierweergave

Om de domeinbouwer in een formulierweergave weer te geven, verwijst u naar zowel het modelveld als het domeinveld in de weergave-XML:


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

Zonder de widget="domain" verklaring en de modeloptie, wordt het veld weergegeven als platte tekst. Zorg ervoor dat u beide altijd opneemt bij het bouwen van formulieren die domeinconfiguratie aan gebruikers blootstellen.


Domeinwaarden schrijven via de XML-RPC API

Als u domeinveldwaarden programmatig via de API instelt, geef dan altijd de waarde door als een string:

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

Een Python-lijstobject doorgeven in plaats van een string is een veelvoorkomende fout die fouten of stille mislukkingen veroorzaakt, afhankelijk van de Odoo-versie. Serialiseer altijd uw domein naar een string voordat u het via de API schrijft.

Beste Praktijken


Deze praktische gewoonten zullen u tijd besparen en problemen voorkomen bij het werken met domeinvelden in Odoo.


Valideer de domeinsyntaxis voordat u deze implementeert

Een ongeldige domeinexpressie genereert fouten op het moment dat Odoo probeert deze te evalueren. Test uw domeinen in de Odoo-zoekbalk of in de ontwikkelaarsmodus voordat u ze opslaat in geautomatiseerde acties of recordregels. Een snelle search_count oproep via de API is ook een betrouwbare manier om te bevestigen dat een domein het verwachte aantal records retourneert.


Gebruik dynamische variabelen waar mogelijk

Vermijd het hardcoderen van gebruikers-ID's, bedrijfs-ID's of datums in domeinexpressies. Gebruik in plaats daarvan dynamische variabelen zoals uid, context_today() en current_company_id. Dit houdt je domeinen draagbaar en voorkomt stille fouten wanneer records tussen omgevingen veranderen.


Bind altijd de modelcontext

Wanneer je een Domeinveld aan een aangepast model toevoegt, stel dan altijd de model_field attribuut in en neem het op in de weergave. Zonder dit zien gebruikers een platte tekstinvoer in plaats van de visuele domeinbouwer, wat de bruikbaarheid vermindert en de kans vergroot dat ongeldige waarden worden opgeslagen.


Houd domeinen leesbaar

Complexe geneste domeinen met behulp van | (OF) en & (EN) operatoren kunnen moeilijk leesbaar en onderhoudbaar worden. Voeg opmerkingen toe in je Python-code die de bedoeling achter elk domein uitleggen. Als een domein zeer complex wordt, overweeg dan of een serveractie of een berekend veld duidelijker en gemakkelijker te testen zou zijn.


Gebruik safe_eval voor programmatieve evaluatie

Bij het evalueren van domeinstrings in Python-code, bijvoorbeeld binnen een serveractie of geautomatiseerde actie, gebruik de ingebouwde safe_eval van Odoo in plaats van de native eval van Python. Het is veiliger, behandelt Odoo-specifieke contextvariabelen correct en is consistent met hoe Odoo domeinen intern evalueert.


Test met realistische gegevens

Verifieer altijd of je domein overeenkomt met de verwachte records voordat je live gaat. Dit is vooral belangrijk voor geautomatiseerde acties en recordregels, waar een onjuiste filter de verkeerde records kan verwerken of de toegang van gebruikers kan blokkeren zonder zichtbare waarschuwing.

Veelvoorkomende Valstrikken


Hier zijn de fouten die het vaakst voorkomen bij het werken met domeinvelden in Odoo, en hoe je ze kunt vermijden.


Het verwarren van het veldtype met domeinsyntaxis

Het woord "domein" betekent twee verschillende dingen in Odoo. Het verwijst naar de filtersyntax (een lijst van tuples), en het verwijst ook naar fields.Domain, een specifiek ORM-veldtype dat die uitdrukkingen als gegevens opslaat. Nieuwkomers in Odoo-aanpassing verwarren deze vaak. Een Domein-veld is een opslagcontainer. De domeinuitdrukking is de filterlogica die erin zit.


Een lijst in plaats van een string via de API doorgeven

Wanneer je naar een Domein-veld schrijft via XML-RPC, moet je een string doorgeven, niet een Python-lijstobject. Het doorgeven van het domein als een ruwe lijst zal een typefout of stille fout veroorzaken, afhankelijk van de Odoo-versie. Serialiseer altijd je domein naar een string voordat je het via de API schrijft.


Ontbrekende modelcontext op de widget

Als je een Domein-veld aan een formulierweergave toevoegt zonder de modelcontext in de widgetopties op te geven, zullen gebruikers een gewone tekstinvoer zien in plaats van de visuele domeinbouwer. De domeinbouwer verschijnt alleen wanneer de widget weet naar welk model te verwijzen. Zorg ervoor dat je de model_field link in je weergave-definitie opneemt.


Hardcoded record-ID's in domeinen

Domeinen die rechtstreeks specifieke record-ID's verwijzen, breken stilletjes wanneer die records worden verwijderd of wanneer je de configuratie naar een nieuwe database kopieert. Gebruik dynamische verwijzingen zoals uid of relationele opzoekingen waar mogelijk om je domeinen draagbaar te houden.


Te brede of te strikte recordregel domeinen

Een recordregel-domein dat te permissief is, kan records blootstellen aan gebruikers die ze niet zouden moeten zien. Een die te restrictief is, kan stilletjes records verbergen zonder enige uitleg aan de gebruiker. Test altijd recordregel-domeinen vanuit het perspectief van de doelgebruikersgroep, niet vanuit het adminaccount dat alle regels omzeilt.


Vergeten gearchiveerde records

Standaard sluit Odoo gearchiveerde records (waar active = False) uit van zoekresultaten. Als je domein hier geen rekening mee houdt, kun je onverwachte hiaten in je gegevens krijgen. Voeg ('active', 'in', [True, False]) toe wanneer je gearchiveerde records in de filterresultaten wilt opnemen.

Conclusie


Domeinvelden zijn een van die bouwstenen die stilletjes een groot deel van de werking van Odoo aandrijven. Van toegangscontrole en geautomatiseerde acties tot dynamische dropdowns en dashboardfilters, domeinuitdrukkingen zijn de ruggengraat van recordfiltering in Odoo, en het fields.Domain type biedt ontwikkelaars een schone, gevalideerde manier om die logica direct in het Odoo-datamodel op te slaan en te presenteren.


Voor zakelijke gebruikers maakt de domeinwidget de configuratie van filters toegankelijk zonder enige code. Voor ontwikkelaars brengt het Domein veldtype duidelijkheid in modeldefinities die voorheen afhankelijk waren van generieke Char-velden met een widgetoverride. Of je nu werkt in Odoo Studio, een aangepaste Python-module schrijft of geautomatiseerde workflows vanuit de interface configureert, begrijpen hoe domeinvelden werken opent een breed scala aan mogelijkheden.


De concepten die in deze gids worden behandeld, zijn van toepassing op alle Odoo-versies en -modules. Tijd besteed aan het begrijpen van domeinvelden is goed geïnvesteerde tijd, omdat ze werkelijk overal in Odoo aanwezig zijn.


Heb je hulp nodig bij je Odoo-implementatie?

Dasolo helpt bedrijven bij het implementeren, aanpassen en optimaliseren van Odoo voor hun specifieke zakelijke behoeften. Of je nu geautomatiseerde workflows instelt, aangepaste modules bouwt of probeert meer uit je bestaande Odoo-configuratie te halen, ons team heeft de technische diepgang om je met vertrouwen vooruit te helpen.

Als je vragen hebt over domeinvelden of een ander aspect van je Odoo-implementatie, neem contact met ons op. We kijken graag naar je configuratie en wijzen je de juiste richting op.

Domeinvelden in Odoo: Een Uitgebreide Gids
Dasolo 6 maart 2026
Deel deze post
Aanmelden om een reactie achter te laten