Overslaan naar inhoud

Contextvelden in Odoo: Een Praktische Gids

Begrijp hoe context het veldgedrag, standaardwaarden en recordfiltering in de Odoo ORM vormgeeft
6 maart 2026 in
Contextvelden in Odoo: Een Praktische Gids
Dasolo
| Nog geen reacties

Als je enige tijd hebt gewerkt met de Odoo ORM of het aanpassen van weergaven, heb je bijna zeker het woord context zien opduiken. Het verschijnt in velddefinities, in XML-weergave-attributen, en doorheen de Python-code van Odoo. Toch blijft het voor veel ontwikkelaars en consultants een van die dingen die gewoon werkt tot het niet meer doet.


Het begrijpen van contextvelden in Odoo is niet alleen een academische oefening. Het heeft directe invloed op hoe je datamodel zich gedraagt, hoe formulieren waarden vooraf invullen, hoe records worden gefilterd, en hoe berekende velden beslissen wat ze moeten retourneren. Of je nu een eenvoudige odoo-aanpassing doet of een volledige module bouwt, het correct instellen van context bespaart veel debugtijd.


Deze gids legt uit wat context is, hoe het door het Odoo-framework stroomt, en hoe je het met vertrouwen kunt gebruiken in echte projecten.

Wat is Context in Odoo


Context in Odoo is een Python-dictionary die meereist met elke aanvraag, elke methode-aanroep, en elke recordoperatie. Het is geen veldtype in de traditionele zin. Je zult fields.Context() niet vinden in de Odoo ORM. In plaats daarvan is context een mechanisme dat de manier waarop velden zich gedragen, aanpast.


Beschouw het als een set onzichtbare instructies die samen met je gegevens worden doorgegeven. Die instructies vertellen Odoo dingen zoals: vul dit veld voor met een standaardwaarde, toon ook gearchiveerde records, bereken dit veld met een andere taal, of pas dit domein toe bij het tonen van de picker voor gerelateerde records.


Waar Verschijnt Context

Je zult context tegenkomen op drie belangrijke plaatsen binnen het Odoo datamodel:

  • Bij velddefinities in Python: De context parameter op relationele velden zoals Many2one, One2many en Many2many.
  • In XML weergave-attributen: Het context attribuut op <field> tags in formulier-, lijst- en kanbanweergaven.
  • In de ORM-omgeving: Toegankelijk via self.env.context in Python-code, en aanpasbaar met self.with_context(key=value).

In al deze drie gevallen doet context hetzelfde fundamentele: het draagt extra informatie die bepaalt hoe een veld of een record zich gedraagt tijdens runtime.

Hoe Context Werkt in het Odoo Datamodel


Context stroomt door de Odoo aanvraagcyclus vanaf het moment dat een gebruiker een formulier opent tot het moment dat een record wordt opgeslagen. Hier is hoe de belangrijkste mechanismen in de praktijk werken.


Standaardwaarden met default_*

Een van de meest gebruikte contextpatronen is default_field_name. Wanneer je een sleutel doorgeeft die begint met default_, gebruikt Odoo deze om een veld vooraf in te vullen wanneer een nieuw record wordt aangemaakt.

Bijvoorbeeld, als een knop een nieuw verkooporderformulier opent en {"default_partner_id": 42} in de context doorgeeft, zal het klantveld al zijn ingesteld op de partner met ID 42. De gebruiker ziet een vooraf ingevuld formulier zonder dat er extra Python-logica nodig is.


Dit patroon wordt veel gebruikt in Odoo-ontwikkeling om slimme navigatiestromen tussen records te creëren.


Het contextattribuut op relationele velden

Wanneer je een Many2one, One2many of Many2many veld in Python definieert, kun je een context parameter doorgeven. Deze context wordt toegepast telkens wanneer het relationele veld records laadt of aanmaakt via zijn popup of dropdown.


Een praktisch voorbeeld: een Many2one die naar res.partner wijst met context={"default_is_company": True} betekent dat als de gebruiker een nieuwe partner direct vanuit dat veld aanmaakt, het Is een Bedrijf selectievakje vooraf aangevinkt zal zijn. Je duwt de gebruiker in de richting van de juiste gegevens zonder het af te dwingen.


Context in XML Weergaven

In view XML werkt de context attribuut op een veldtag op dezelfde manier, maar het kan dynamisch zijn. Je kunt andere veldwaarden refereren met behulp van Odoo's evaluatiesyntaxis:


Dit stelt je in staat om intelligente formulieren te bouwen waarbij de context van het ene veld afhankelijk is van de waarde van een ander. Het is een kerntechniek in odoo aanpassing voor het creëren van slimme relationele gedragingen zonder extra Python-code te schrijven.


Context Lezen en Wijzigen in Python

Binnen elke modelmethode kun je de huidige context lezen met self.env.context. Dit geeft je de volledige dictionary zoals deze was toen de methode werd aangeroepen.


Om code uit te voeren met een gewijzigde context, gebruik je self.with_context(key=value). Dit retourneert een nieuwe recordset die de bijgewerkte context meedraagt zonder de originele te veranderen. Het is een schoon, niet-destructief patroon dat goed past bij Odoo's functionele programmeerstijl.


Veelvoorkomende Ingebouwde Context Sleutels

Odoo zelf gebruikt verschillende gereserveerde contextsleutels die specifieke gedragingen in het Odoo framework activeren:


  • lang: Verandert de taal die gebruikt wordt voor vertaalde veldwaarden.
  • active_test: Stel in op False om gearchiveerde records op te nemen in zoekresultaten.
  • no_recompute: Voorkomt dat opgeslagen berekende velden opnieuw worden berekend.
  • mail_notrack: Deactiveert chattertracking voor een schrijfoperatie.
  • allowed_company_ids: Beheert de zichtbaarheid van multi-company records.
  • bin_size: Geeft bestandsgroottes terug in plaats van binaire inhoud voor binaire velden.

Het kennen van deze ingebouwde sleutels maakt deel uit van elke solide odoo ontwikkelaarsgids omdat ze je in staat stellen om gedrag te controleren zonder aangepaste code te schrijven.

Zakelijke Gebruikscases


Contextvelden zijn niet alleen een ontwikkelaarsinstrument. Ze lossen echte workflowproblemen op in verschillende bedrijfsgebieden. Hier zijn vijf voorbeelden uit veelvoorkomende Odoo-implementaties.


1. CRM: Vooraf invullen van het verkoopteam bij nieuwe leads

Een salesmanager heeft een kanbanweergave die is gefilterd op haar team. Wanneer ze op "Nieuw" klikt, verwacht ze dat de lead automatisch aan haar team wordt toegewezen. Door default_team_id in de context van de actie door te geven, wordt het teamveld vooraf ingevuld op het moment dat het formulier opent. Geen handmatige selectie nodig, geen verkeerde teamtoewijzingen.


2. Verkoop: Standaardprijslijst op basis van klantsegment

Wanneer een verkoper een offerte aanmaakt vanuit een specifieke klantcategorie-weergave, kan het prijslijstveld vooraf worden ingesteld met behulp van de context. De context draagt default_pricelist_id op basis van de categorie, waardoor de verkoper naar de juiste prijsstelling wordt geleid zonder hun keuzes te beperken.


3. Voorraad: Locaties filteren in transferformulieren

In magazijnoperaties kan het bronlocatieveld van een transferformulier de context gebruiken om de dropdown te beperken tot alleen locaties die behoren tot een specifiek magazijn. Dit gebeurt door een domein via de context door te geven op het Many2one-veld, waardoor de interface schoon blijft en fouten in multi-magazijninstellingen worden verminderd.


4. Boekhouding: Meertalige Factuurregels

Bij het genereren van facturen voor internationale klanten dwingt de lang context sleutel vertaalde beschrijvingen af te drukken in de taal van de klant. Een factuur die naar een Franse klant wordt gestuurd, toont productnamen en beschrijvingen in het Frans, zelfs als de interne database alles in het Engels opslaat.


5. Aangepaste Modellen: Gearchiveerde Producten Weergeven in een Speciale Weergave

Een operationeel team moet gearchiveerde producten naast actieve producten bekijken. Een aangepaste lijstweergave geeft active_test: False door in zijn actieverzoek. Zonder enige Python-code te wijzigen, verschijnen alle producten, inclusief gearchiveerde, in die specifieke weergave, terwijl de rest van de interface onaangetast blijft.

Context Aanmaken en Aanpassen op Velden


Er zijn twee manieren om context aan velden in Odoo toe te voegen of te wijzigen: met Odoo Studio voor no-code aanpassingen, of door Python en XML te schrijven voor volledige technische controle. Dit is een belangrijk onderdeel van elke odoo technische tutorial over veldgedrag.


Odoo Studio gebruiken

Odoo Studio stelt je in staat om bepaalde veld eigenschappen te wijzigen zonder code te schrijven. Voor relationele velden biedt Studio een contextconfiguratieoptie waar je standaardwaarden kunt instellen die worden toegepast wanneer een nieuw record vanuit dat veld wordt aangemaakt.


Dit is nuttig voor eenvoudige gevallen: het vooraf invullen van een bedrijf, een team, een categorie of een verantwoordelijke gebruiker. De beperking is dat de contextondersteuning van Studio opzettelijk vereenvoudigd is. Voor dynamische context die naar andere veldwaarden verwijst, moet je de technische route volgen.


Houd er rekening mee dat de context die je instelt, direct op de weergave wordt opgeslagen wanneer je odoo studio velden gebruikt. Als je later een technische aanpassing op dezelfde weergave maakt, moet je rekening houden met de bestaande door Studio gedefinieerde context om conflicten te vermijden.


Context op Velden Definiëren in Python

In een aangepast module wordt context direct aan de velddefinitie toegevoegd. Voor een Many2one-veld accepteert de context parameter een statische dictionary:


Deze statische context wordt elke keer toegepast wanneer het veld laadt of gerelateerde records aanmaakt. Het verandert niet op basis van andere veldwaarden. Voor een context die reageert op de staat van het huidige record, verplaats je de logica naar het weergaveniveau.


Context definiëren in XML-weergaven

In view XML accepteert het contextattribuut een string die Odoo tijdens runtime evalueert. Je kunt veldwaarden, de huidige gebruikers-ID (uid), de actieve record-ID (active_id) en andere variabelen verwijzen:

Dit maakt de context op weergaveniveau veel flexibeler dan de context op veldniveau. Het is de standaardaanpak in het odoo-framework voor het bouwen van formulieren waarbij het gedrag van het ene veld afhankelijk is van een ander. Dit is ook hoe je velden odoo gedragingen creëert die natuurlijk en intuïtief aanvoelen voor eindgebruikers.


Context doorgeven via venactie

Context kan ook worden ingesteld op ir.actions.act_window records. Dit is hoe menu's en knoppen context doorgeven aan de weergaven die ze openen. Het context veld van een actie bevat de woordenlijst die wordt samengevoegd met de sessiecontext wanneer de weergave wordt geladen.


Dit is de schoonste manier om gebruiksscenario's zoals het CRM-verkoopteamvoorbeeld hierboven af te handelen. De context leeft op de actie, niet op de velddefinitie, wat betekent dat je verschillende standaardinstellingen kunt hebben in verschillende navigatiecontexten zonder de modelcode aan te raken.

Beste Praktijken


Werken met context in Odoo wordt veel soepeler zodra je een paar consistente gewoonten volgt. Deze zijn van toepassing of je nu een module bouwt of een snelle odoo-aanpassing doet.


  • Gebruik context voor suggesties, niet voor handhaving. Contextgestuurde standaardinstellingen begeleiden gebruikers zonder hen te blokkeren. Als je een harde beperking nodig hebt, gebruik dan in plaats daarvan een domein of een onchange-methode.
  • Plaats dynamische context in weergaven, niet in velddefinities. Context op veldniveau is statisch. Als de context de huidige status van het record moet weerspiegelen, is de view XML de juiste plek daarvoor.
  • Gebruik with_context() in plaats van env.context direct te wijzigen. De omgeving van Odoo is ontworpen om onveranderlijk te zijn binnen een oproep. Maak altijd een nieuwe omgeving met with_context() in plaats van te proberen de bestaande te muteren.
  • Wees opzettelijk over wat je in de context doorgeeft. Contextsleutels accumuleren terwijl ze door de oproepstack reizen. Onnodige sleutels doorgeven kan leiden tot onverwacht gedrag in methoden die op die sleutels controleren.
  • Gebruik context om vlaggen voor voorwaardelijke logica door te geven. Een veelvoorkomend patroon is om een boolean-vlag zoals from_wizard: True in de context door te geven, en deze vervolgens te controleren in een compute- of onchange-methode om ander gedrag toe te passen. Dit voorkomt dat modelvelden vervuild raken met workflowstatus.
  • Documenteer aangepaste contextsleutels in uw module. Contextsleutels zijn onzichtbaar tenzij u weet waar u moet kijken. Voeg een opmerking of docstring toe die uitlegt welke aangepaste contextsleutels uw module leest of instelt. Dit betaalt zich uit wanneer u of een collega later terugkomt naar de code.

Veelvoorkomende Valstrikken


Contextgerelateerde bugs kunnen moeilijk te diagnosticeren zijn omdat de context onzichtbaar is in de UI. Dit zijn de fouten die het vaakst voorkomen in echte projecten.


De standaard_* behandelen als verplichte waarden

Een standaardwaarde die via de context is ingesteld, wordt alleen toegepast wanneer een record wordt aangemaakt via een formulier. Als u records programmatisch via de ORM aanmaakt zonder de relevante context door te geven, wordt de standaard niet toegepast. Ontwikkelaars verwachten soms dat contextstandaarden zich gedragen als Python-niveau default parameters op velden. Dat doen ze niet. Geef altijd de context expliciet door bij het aanmaken van records in code als die standaarden belangrijk zijn.


De contextdictionary rechtstreeks muteren

De contextdictionary wordt gedeeld over de call stack. Als u self.env.context rechtstreeks wijzigt, kunt u andere code die in dezelfde transactie draait op onverwachte manieren beïnvloeden. Het juiste patroon is altijd self.with_context(new_key=value), wat een nieuwe omgeving creëert met een kopie van de context plus uw wijzigingen.


Te veel doorgeven in de context

Elke sleutel die u aan de context toevoegt, reist door de hele oproepketen. Sommige Odoo-methoden controleren op specifieke contextsleutels en veranderen hun gedrag dienovereenkomstig. Onverwachte sleutels doorgeven kan die takken per ongeluk activeren. Houd de context slank en specifiek voor wat de onmiddellijke operatie nodig heeft.


Vergeten active_test bij het zoeken naar gearchiveerde records

Standaard filteren de search() en search_read() methoden van Odoo gearchiveerde records (waar active = False). Als uw code moet werken met gearchiveerde records, moet u expliciet active_test: False in de context doorgeven. Dit vergeten is een zeer veelvoorkomende bug in aanpassingen voor voorraad- en productbeheer.


Contextconflicten tussen Studio en aangepaste code

Als Odoo Studio context heeft ingesteld op een veld in een weergave, en u later een technische weergave-uitbreiding toevoegt die zich richt op hetzelfde veld, kunnen beide contexten conflicteren of kan de een de ander overschrijven, afhankelijk van de XML-samenvoegvolgorde. Inspecteer altijd de bestaande context op een veld voordat u uw eigen context toevoegt via een weergave-erfelijkheid. Dit is een bijzonder veelvoorkomend probleem bij het mengen van odoo studio-velden met module-gebaseerde aanpassingen.

Conclusie


Context is one of those mechanisms in Odoo that quietly does a lot of work. Once you understand how it flows through field definitions, view attributes, and the ORM environment, you gain a much finer level of control over how your data model behaves.


De belangrijkste punten zijn eenvoudig. Gebruik default_* sleutels om gebruikers naar de juiste gegevens te leiden zonder hen te dwingen. Plaats dynamische context in weergaven in plaats van in velddefinities. Gebruik altijd with_context() in plaats van de context ter plaatse te wijzigen. En houd je context slank zodat deze andere delen van het systeem niet onverwacht beïnvloedt.

Of je nu werkt aan een odoo veldtutorial, een aangepaste module bouwt of een veld probleemoplost dat vreemd gedrag vertoont, het begrijpen van context zal altijd deel uitmaken van het antwoord.


Bij Dasolo helpen we bedrijven Odoo te implementeren, aan te passen en te optimaliseren zodat het aansluit bij hun echte bedrijfsprocessen. Als je werkt aan een aanpassing waarbij context betrokken is en je niet zeker weet of je het goed hebt, of als je gewoon wilt praten over je Odoo-implementatie, helpen we je graag.

Neem contact op met ons team via de contactpagina en laat ons weten wat je aan het bouwen bent. We werken met bedrijven van alle groottes om Odoo te laten werken zoals het zou moeten.

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