Overslaan naar inhoud

Boolean-veld in Odoo: De Volledige Gids Voor Developers

Alles wat je moet weten over het Boolean-veld in het Odoo-datamodel, van hoe vinkjes werken tot hoe je het technisch kunt aanpassen
6 maart 2026 in
Boolean-veld in Odoo: De Volledige Gids Voor Developers
Dasolo
| Nog geen reacties

Introductie


Het Boolean-veld is het meest rechttoe-rechtaan gegevenstype in Odoo en tegelijk extreem nuttig. Elke keer dat je een vinkje zet bij een verkooporder, een klant op actief zet of een product markeert als favoriet, werk je met een Boolean-veld.


Ondanks z’n eenvoud kent het Boolean-veld enkele eigenschappen en valkuilen waar je beter van op de hoogte bent. Weten wanneer je het moet inzetten, hoe je het slim configureert en wanneer je beter voor een ander veld kiest, voorkomt rommel in je databasis en dure misverstanden later.


Deze handleiding bekijkt het Boolean-veld van alle kanten: wat het precies opslaat, hoe het zicht- en doorzoekbaar is in Odoo, hoe je het toevoegt via Studio, Python of API, concrete bedrijfscases en praktische tips om het correct te gebruiken.

Wat is het Boolean-veld in Odoo


In de Odoo ORM heeft een Boolean-veld twee mogelijke waarden: True of False. Die waarden corresponderen rechtstreeks met een BOOLEAN-kolom in PostgreSQL. Er is geen tussenstand: het veld is aangevinkt of niet, ja of nee.


Voor gebruikers toont een Boolean-veld zich meestal als een checkbox in formulieren. In lijsten zie je vaak een vinkje voor True en niets voor False. Afhankelijk van de widget kan het ook als een schakelaar of als een sterpictogram verschijnen voor leesbare weergave.


Een typische definitie in een Python-module ziet er ongeveer zo uit:

from odoo import fields, models

class SaleOrder(models.Model):
    _inherit = 'sale.order'

    needs_manual_review = fields.Boolean(
        string='Needs Manual Review',
        default=False,
    )

Met de parameter string geef je het label dat in de interface verschijnt; default bepaalt de startwaarde bij nieuw aangemaakte records. Odoo valt technisch terug op False, maar expliciet een default instellen maakt je bedoeling duidelijk voor collega-ontwikkelaars.

In Odoo Studio heet hetzelfde veld een Checkbox. Velden die via Studio aangemaakt worden, krijgen automatisch een x_studio_-prefix. Als je het veld via Python of de API maakt, kies je zelf de technische naam.

Hoe het veld werkt


Voeg je een Boolean-veld toe aan een model, dan zorgt Odoo bij installatie of een module-update automatisch voor de juiste kolom in PostgreSQL. Je hoeft niet zelf aan SQL-migraties te sleutelen.


Belangrijk om te onthouden: een Boolean-veld in Odoo geeft nooit None of NULL terug. De ORM levert altijd True of False. Zelfs als de databasekolom leeg lijkt, zal Odoo False retourneren bij uitlezen. Dat verschilt van velden zoals Many2one of Char, waar een lege waarde soms als None terugkomt en waar je voorzichtiger moet zijn met checks.


Belangrijkste veldattributen

Dit zijn de belangrijkste eigenschappen die je op een Boolean-veld kunt instellen in Odoo:

  • default: de waarde bij het aanmaken van een nieuw record. Meestal False, behalve bij specifieke opt-out situaties waar True logischer is.
  • compute: koppel een Python-methode die de waarde dynamisch berekent — handig voor afgeleide vinkjes gebaseerd op andere velden.
  • store: in combinatie met compute bepaalt dit of de berekende waarde in de database wordt opgeslagen. Met store=True kun je op dat veld zoeken en groeperen zonder steeds te herberekenen.
  • readonly: voorkomt dat gebruikers het veld handmatig aanpassen in de UI. Handig voor systeemgestuurde flags.
  • copy: regelt of de waarde wordt meegenomen bij dupliceren. Standaard True; voor statussen zoals "is_approved" wil je meestal copy=False zodat duplicaten geen onterecht actieve flags krijgen.
  • groups: beperkt zichtbaarheid en bewerken tot specifieke gebruikersgroepen.

Weergave in views

In formulieren verschijnt het Boolean-veld als een gewone HTML-checkbox; in lijsten zie je doorgaans een vink-icoon voor True en niets voor False, wat lijsten snel scanbaar maakt.

Je kunt de weergave aanpassen met widgets. Het toggle-widget toont een schakelaar, praktisch voor voorkeuren. Voor leesbare weergave is er bijvoorbeeld een boolean_favorite-widget die een ster rendert, vaak gebruikt bij producten of contacten.


Boolean-velden in domeinfilters

Boolean-velden zijn erg handig in Odoo-domeinen — de zoekfilters en regels die je gebruikt in views, automatische acties en toegangsregels. Een filter voor aangevinkte records ziet er zo uit:

[('needs_manual_review', '=', True)]

Omdat er maar twee opties zijn, is filteren vaak heel rechtlijnig; je kunt ook expliciet False gebruiken voor de ongevinkte set:

[('needs_manual_review', '=', False)]

Die eenvoud verklaart waarom Boolean-velden zo goed samenwerken met automatische acties, geplande taken en serveracties: ze zijn makkelijk te evalueren zonder complexe condities.


Interactie met de Odoo ORM

Uitlezen en wegschrijven van Boolean-velden is in Odoo heel direct: je leest het attribuut op het record, vergelijkt met True of False en kent het meteen een waarde toe. De ORM doet de rest, inclusief correcte omzetting voor XML-RPC, zonder verrassingen.

Praktische bedrijfsvoorbeelden


Boolean-velden komen in vrijwel elk bedrijfsdomein voor. Hieronder vijf concrete voorbeelden uit echte workflows.


CRM: bijhouden of een lead gekwalificeerd is

Verkoopteams willen snel zien welke leads door een senior zijn beoordeeld en als kans bestempeld. Een Boolean-veld zoals is_qualified op leads maakt het makkelijk om te filteren: ongekwalificeerde leads gaan naar junior medewerkers, gekwalificeerde naar opvolging. Dat is een eenvoudiger alternatief dan een extra pipeline-fase of uitgebreid statussysteem.


Sales: orders markeren die handmatige controle nodig hebben

Sommige orders vereisen extra goedkeuring, bijvoorbeeld bij hoge bedragen of nieuwe klanten. Een needs_manual_review-veld op verkooporders, gekoppeld aan een automatische regel die op basis van voorwaarden True zet, geeft finance of operations een duidelijke werklijst om af te handelen zonder in alle orders te moeten graven.


Magazijn: producten als uit assortiment markeren

Als een product niet meer verkocht wordt maar in het systeem moet blijven voor historische data, is archiveren niet altijd ideaal. Een is_discontinued-veld op producttemplates laat snel zien dat een artikel niet meer herbesteld of aangeboden mag worden en je kunt het gebruiken in prijslijstaanpassingen, inkoopregels en webshopzichtbaarheid.


Boekhouding: facturen die extra aandacht nodig hebben

Financiële teams moeten soms facturen markeren die betwist zijn, een prijsverschil hebben of wachten op een creditnota. Een under_dispute-veld geeft structuur: je kunt rapporten en filters draaien, herinneringen onderdrukken en voorkomen dat klanten onnodig betalingsdruk krijgen terwijl een issue nog loopt.


HR: opvolging van opleidingen en certificaten

HR moet vaak aantonen wie verplichte trainingen voltooid heeft of welke medewerkers bepaalde certificaten bezitten. Een veld zoals safety_training_completed op personeelskaarten is een eenvoudige, auditable manier om dit te volgen en vormt de basis voor compliance-rapporten zonder een groot aparte module te bouwen.

Een Boolean-veld aanmaken of aanpassen


Drie manieren om een Boolean-veld toe te voegen, afhankelijk van technische voorkeur en beheersbehoefte.


Via Odoo Studio (no-code)

Odoo Studio is de ingebouwde low-code editor waarmee je zonder Python of XML aanpassingen maakt. Zo voeg je een Boolean toe met Studio:

  1. Open Odoo Studio vanuit het hoofdmenu (Studio-app vereist).
  2. Navigeer naar het formulier waar je het veld wil toevoegen.
  3. Sleep een Checkbox-veld uit de zijbalk naar het formulier.
  4. Stel label, standaardwaarde en eventueel readonly/required in via de eigenschappen.
  5. Sla op en sluit Studio.

Studio regelt alles: het veld krijgt een x_studio_-prefix, wordt in de database aangemaakt en verschijnt in de view zonder serverrestart of module-upgrade.


Via Python in een custom module

Voor ontwikkelaars die modules bouwen is het definiëren van velden in Python de aanbevolen aanpak: versiebeheer, tests en gecontroleerde deploys zijn dan mogelijk.

from odoo import fields, models

class ResPartner(models.Model):
    _inherit = 'res.partner'

    x_is_key_account = fields.Boolean(
        string='Key Account',
        default=False,
        copy=False,
    )

Na de definitie voeg je het veld toe aan de relevante view-XML zodat het in de UI verschijnt. Odoo creëert de databasekolom bij installatie of upgrade van de module.


Voor berekende Boolean-velden gebruik je dit patroon:

from odoo import api, fields, models

class SaleOrder(models.Model):
    _inherit = 'sale.order'

    is_high_value = fields.Boolean(
        string='High Value Order',
        compute='_compute_is_high_value',
        store=True,
    )

    @api.depends('amount_total')
    def _compute_is_high_value(self):
        for order in self:
            order.is_high_value = order.amount_total >= 10000

Met store=True wordt de berekende waarde opgeslagen, waardoor je erop kunt zoeken en groeperen zonder iedere keer opnieuw te rekenen.


Via de XML-RPC API

Als je Odoo configureert via scripts of een deployment pipeline kun je velden ook creëren via de XML-RPC op het model ir.model.fields:

field_id = models.execute_kw(
    ODOO_DB, uid, ODOO_API_KEY,
    'ir.model.fields', 'create',
    [{
        'name': 'x_needs_manual_review',
        'field_description': 'Needs Manual Review',
        'model_id': model_id,
        'ttype': 'boolean',
        'state': 'manual',
    }]
)

De instelling state: 'manual' geeft aan dat het veld buiten een module gemaakt is — correct voor velden die via Studio of API worden toegevoegd. Dit is ook de methode die wij gebruiken bij geautomatiseerde configuraties voor klanten.


Aanbevolen werkwijzen


1. Definieer altijd een default-waarde

Ook al geeft Odoo False terug zonder expliciete default, het is goede gewoonte default=False te zetten. Dat maakt intentie helder in de code en voorkomt onduidelijkheden in automatische acties en filters.


2. Geef duidelijke, vraagachtige namen

Boolean-namen werken het best wanneer ze als ja/nee-vraag lezen: is_verified, needs_approval, has_warranty of is_key_account zijn direct begrijpelijk. Vermijd vage namen zoals flag, status of check — die zeggen niks over de betekenis.


3. copy=False voor goedkeuringsflags

Als een veld een status representeert die niet mee mag bij duplicatie, zoals is_approved of is_sent, stel dan copy=False in. Anders kopieer je per ongeluk goedkeuringen naar nieuwe records.


4. Gebruik compute voor afgeleide toestanden

In plaats van elders in de code serveracties of losse writes te gebruiken om een Boolean aan te passen, definieer het veld als computed met @api.depends(). Zo hou je logica geconcentreerd, onderhoudbaar en voorspelbaar.


5. Voeg filtervelden toe aan de zoekview als gebruikers ze vaak gebruiken

If users regularly need to filter records based on a Boolean field, add it explicitly to the search view. In Studio, enable the search option in the field properties panel. In code, add it to the <search> view XML. This gives users a clean filter button in the search bar rather than forcing them to use advanced filters every time.

Veelgemaakte fouten


Een Boolean gebruiken voor een meerkeuze-status

Dit is de klassieker: gebruik geen Boolean voor zaken met drie of meer mogelijke toestanden (bijv. pending, approved, rejected). Dan eindig je met meerdere vinkjes en complexe logica. Gebruik een Selection-veld of een echte workflow voor statusbeheer.


Vergeten copy=False op goedkeuringsflags

Wanneer gebruikers records dupliceren, worden waarden standaard meegekopieerd. Een goedgekeurde order zal dus meteen als goedgekeurd op de duplicate staan — plaats copy=False op elk vlagveld dat geen restwaarde mag hebben.


Het veld niet toevoegen aan de zoekview

Als een Boolean belangrijk is voor filtering maar niet in de zoekview staat, dwing je gebruikers telkens de geavanceerde filter te gebruiken. Dat vertraagt dagelijkse taken; voeg zulke velden meteen toe aan de zoekopties.


Een Boolean gebruiken in plaats van het ingebouwde active-veld

Odoo heeft standaard een active-veld op veel modellen om zichtbaarheid te regelen. Als jouw veld records moet verbergen of archiveren, gebruik dan het native active-mechanisme in plaats van een custom vlag. Zo blijf je binnen Odoo-conventies en maak je gebruik van de ingebouwde archive/unarchive-functionaliteit.


Berekende Boolean-velden zonder store=True en filters

Een computed Boolean zonder store=True kun je niet gebruiken in SQL-gebaseerde filters of groepsoperaties; Odoo zal de filter negeren of een fout geven. Als een berekend veld filterbaar of rapporteerbaar moet zijn, zet dan altijd store=True.

Slotwoord


Het Boolean-veld werkt zo goed dat je het vaak niet meer opmerkt — precies omdat het doet wat het moet doen. Van het active-vlagje dat zichtbaarheid regelt tot custom flags die bedrijfsprocessen sturen: ze zitten overal.


Wie begrijpt hoe het veld zich gedraagt in het datamodel, de juiste defaults en attributen zet en de grens met andere veldtypes kent (zoals Selection), krijgt een schoner, voorspelbaar en onderhoudbaar Odoo-landschap.

Een goed toegepast Boolean-veld valt de eindgebruiker niet op: het werkt gewoon. Een verkeerd gebruikt veld zorgt voor verwarring, inconsistente toestanden en stapels ad-hoc-oplossingen. Het verschil zit in regels kennen en consequent toepassen.

Bij Dasolo helpen we bedrijven Odoo in te richten, aan te passen en te optimaliseren over afdelingen heen. Of je nu hulp wilt bij een schone datamodellering, het toevoegen van gerichte velden of het bouwen van een volledige module — ons team ondersteunt je graag. Neem contact op en laten we je Odoo-project bespreken.

Boolean-veld in Odoo: De Volledige Gids Voor Developers
Dasolo 6 maart 2026
Deel deze post
Aanmelden om een reactie achter te laten