Inleiding
Het Boolean-veld is een van de eenvoudigste veldtypes in Odoo en ook een van de meest gebruikte. Elke keer dat je een selectievakje aanvinkt op een verkooporder, een klant als actief markeert of een product als favoriet aanmerkt, interacteer je met een Boolean-veld.
Ondanks zijn eenvoud heeft het Boolean-veld een paar gedragingen die het waard zijn om goed te begrijpen. Weten wanneer je het moet gebruiken, wanneer niet, en hoe je het goed configureert, zal je helpen om schonere Odoo-omgevingen te bouwen en enkele veelvoorkomende fouten te vermijden die zelfs ervaren teams maken.
Deze gids behandelt het Boolean-veld vanuit elke hoek: wat het opslaat, hoe het zich gedraagt in het Odoo-datamodel en de gebruikersinterface, hoe je het kunt maken of aanpassen met Odoo Studio of Python, echte zakelijke gebruikscases en praktische tips om het meeste uit dit veldtype te halen.
Wat is het Boolean-veld in Odoo
In de Odoo ORM slaat het Boolean-veld een van de twee waarden op: True of False. Het komt direct overeen met een BOOLEAN kolom in PostgreSQL. Er is hier geen ambiguïteit: het veld is ofwel aangevinkt of niet aangevinkt, ingeschakeld of uitgeschakeld, ja of nee.
Vanuit het perspectief van de gebruiker verschijnt een Booleaanse veld als een checkbox in formulierweergaven. In lijstweergaven wordt het typisch weergegeven als een vinkje-icoon wanneer de waarde True is en niets wanneer het False is. In sommige configuraties verschijnt het als een schakelswitch in plaats van een traditionele checkbox, afhankelijk van de toegepaste widget.
Hier is hoe een Booleaanse velddefinitie eruitziet in een Python Odoo-module:
from odoo import fields, models
class SaleOrder(models.Model):
_inherit = 'sale.order'
needs_manual_review = fields.Boolean(
string='Needs Manual Review',
default=False,
)
De string parameter stelt het label in dat in de interface wordt weergegeven. De default parameter regelt de initiële waarde wanneer nieuwe records worden aangemaakt. Zonder een standaardwaarde beschouwt Odoo het veld automatisch als False, maar het wordt als goede praktijk beschouwd om het expliciet te declareren.
In Odoo Studio wordt ditzelfde veldtype eenvoudigweg een Checkbox genoemd. Velden die via Studio zijn aangemaakt, krijgen automatisch een x_studio_ prefix. Wanneer ze via Python of de XML-RPC API worden aangemaakt, definieer je de technische naam zelf.
Hoe het veld werkt
Wanneer je een Booleaanse veld aan een Odoo-model toevoegt, creëert het framework automatisch de bijbehorende kolom in de PostgreSQL-database tijdens de installatie of upgrade van de module. Geen handmatige SQL-migratie is nodig.
Een belangrijke zaak om te begrijpen: in Odoo houdt een Booleaanse veld nooit None of NULL vast. De ORM retourneert altijd ofwel True of False. Zelfs als de databasekolom geen waarde heeft, zal Odoo False retourneren wanneer je het veld leest. Dit is anders dan andere veldtypes zoals Many2one of Char, waar een lege waarde terugkomt als False of None en je voor beide moet controleren.
Belangrijke Veldattributen
Hier zijn de belangrijkste eigenschappen die je kunt configureren op een Booleaanse veld in het Odoo-framework:
- default: Stelt de waarde in wanneer een nieuw record wordt aangemaakt. Bijna altijd ingesteld op
False, maar kanTruezijn voor opt-out scenario's. - compute: Koppelt een Python-methode die de waarde dynamisch berekent. Nuttig voor afgeleide vlaggen op basis van de status van andere velden.
- store: Wanneer gebruikt met
compute, bepaalt of de waarde in de database wordt opgeslagen. Metstore=Truekunnen berekende Booleaanse velden worden gebruikt in zoekfilters en rapporten. - readonly: Voorkomt dat gebruikers de veldwaarde handmatig wijzigen in de interface. Dit is gebruikelijk voor berekende vlaggen die alleen door het systeem moeten worden ingesteld.
- copy: Beheert of de veldwaarde wordt overgenomen bij het dupliceren van een record. Standaard is dit
True. Voor vlaggen zoals "is goedgekeurd", wil je meestalcopy=Falsezodat gedupliceerde records schoon beginnen. - groups: Beperkt zichtbaarheid en bewerking tot specifieke gebruikersgroepen.
Hoe het verschijnt in weergaven
In formulierweergaven wordt een Boolean-veld weergegeven als een standaard HTML-checkbox. In lijstweergaven toont Odoo een vinkicoon voor True en niets voor False standaard. Dit maakt lijstweergaven visueel gemakkelijk te scannen.
Je kunt veranderen hoe een Boolean-veld wordt weergegeven met behulp van weergavewidgets. De toggle widget toont het als een schakelaar in plaats van een checkbox, wat goed werkt voor instellingen of voorkeuren. Voor alleen-lezen weergave rendert de boolean_favorite widget de waarde als een stericoon, wat je kunt zien op product- en contactformulieren in standaard Odoo.
Boolean-velden gebruiken in domeinfilters
Boolean-velden zijn zeer handig te gebruiken in Odoo-domeinen, dit zijn de filterexpressies die worden gebruikt in zoekweergaven, geautomatiseerde acties en toegangsregels. Een filter voor niet-aangevinkte records ziet er als volgt uit:
[('needs_manual_review', '=', True)]
Aangezien er maar twee mogelijke waarden zijn, kun je ook de eenvoudigere vorm zonder de operator gebruiken:
[('needs_manual_review', '=', False)]
Dit eenvoudige filtergedrag is een van de redenen waarom Boolean-velden zo soepel integreren met Odoo-geautomatiseerde acties, geplande acties en serveracties. Ze zijn gemakkelijk te controleren en erop te reageren zonder complexe voorwaarden.
Interactie met de Odoo ORM
Het lezen en schrijven van Booleaanse velden in Odoo-ontwikkeling is zo eenvoudig als het maar kan. Je krijgt toegang tot de waarde op het recordobject, vergelijkt deze met True of False, en wijst deze direct toe. De ORM regelt de rest. Er zijn geen conversies, geen serialisatie-uitzonderingen, en geen verrassingen bij het doorgeven van waarden via de XML-RPC API, aangezien True en False netjes overeenkomen met hun XML-RPC boolean-equivalenten.
Zakelijke gebruikscases
Booleaanse velden komen in elke afdeling voor in een typische Odoo-implementatie. Hier zijn vijf praktische voorbeelden uit echte bedrijfsworkflows.
CRM: Bijhouden of een Lead Gekwalificeerd Is
Verkoopteams moeten vaak aangeven welke leads zijn beoordeeld door een senior vertegenwoordiger en bevestigd als levensvatbare kansen. Een Booleaanse veld genaamd is_qualified op het CRM-leadmodel biedt teams een gemakkelijke manier om hun pijplijn te filteren. Ongekwalificeerde leads kunnen door junior personeel worden afgehandeld, terwijl de gekwalificeerde leads prioriteit krijgen. Dit eenvoudige selectievakje vervangt de noodzaak voor een specifieke fase of een statusveld alleen voor dit doel.
Verkoop: Bestellingen Markeren Die Handmatige Beoordeling Vereisen
In sommige bedrijven vereisen bepaalde verkooporders extra goedkeuring voordat ze worden bevestigd, bijvoorbeeld orders boven een bepaald bedrag of voor nieuwe klanten. Een Booleaanse veld needs_manual_review op de verkooporder, gecombineerd met een geautomatiseerde actie die het op True zet op basis van bedrijfsregels, geeft het financiële of operationele team een duidelijke queue om mee te werken. Ze kunnen de bestellingenlijst filteren op dit veld en goedkeuringen verwerken zonder door de volledige bestellingenlijst te hoeven graven.
Voorraad: Producten Markeren als Niet Meer in Catalogus
Wanneer een product niet langer wordt verkocht maar nog steeds in het systeem moet blijven voor historische records, is archivering niet altijd de juiste optie. Een Booleaanse veld is_discontinued op de producttemplate laat inkoop- en verkoopteams in één oogopslag zien dat het item niet opnieuw besteld of aan klanten geciteerd moet worden. Je kunt dit veld gebruiken in prijslijstfilters, validatieregels voor inkooporders en instellingen voor zichtbaarheid in de webshop.
Boekhouding: Identificeren van Facturen die Aandacht Vereisen
Financiële teams moeten soms facturen markeren die zijn betwist, een prijsdiscrepantie bevatten, of wachten op een creditnota. In plaats van te vertrouwen op vrije tekstnotities in de chatter, biedt een Booleaanse veld under_dispute het team een gestructureerde manier om deze facturen te filteren en rapporteren. Geautomatiseerde herinneringen kunnen ook worden onderdrukt voor facturen met deze vlag ingesteld op True, waardoor onnodige betalingsdruk op een klant wordt voorkomen terwijl een probleem wordt opgelost.
HR: Bijhouden van Certificeringen en Voltooiing van Trainingen
HR-afdelingen moeten vaak bevestigen dat werknemers verplichte training hebben voltooid of over een vereiste certificering beschikken. Een Boolean-veld op het werknemersrecord, zoals safety_training_completed, biedt een eenvoudige en controleerbare manier om dit bij te houden. Managers kunnen hun teamlijst filteren om te zien wie de training nog moet voltooien, en de gegevens kunnen in compliance-rapporten worden opgenomen zonder een complex, speciaal module te bouwen.
Een Boolean-veld maken of aanpassen
Er zijn drie hoofdbenaderingen om een Boolean-veld aan een Odoo-model toe te voegen, afhankelijk van uw technische setup en het niveau van aanpassing dat u nodig heeft.
Gebruik Odoo Studio (Geen Code)
Odoo Studio is de ingebouwde low-code tool voor het aanpassen van Odoo zonder enige Python of XML te schrijven. Om een Boolean-veld via Studio toe te voegen:
- Open Odoo Studio vanuit het hoofdmenu (vereist de Studio-app).
- Navigeer naar het formulier waar u het veld wilt toevoegen.
- Sleep een Checkbox veld vanuit de zijbalk naar de formulierlay-out.
- Stel het label, de standaardwaarde en eventuele vereiste of alleen-lezen beperkingen in het eigenschappenpaneel van het veld in.
- Sla op en sluit Studio.
Studio regelt alles automatisch: het veld wordt in de database aangemaakt met een x_studio_ prefix en toegevoegd aan de weergave. Geen herstart of upgrade is vereist.
Gebruik Python in een Aangepaste Module
Voor ontwikkelaars die Odoo-modules bouwen, worden Boolean-velden rechtstreeks gedefinieerd in Python-modelbestanden. Dit is de aanbevolen benadering voor elke aanpassing die versiebeheer, testen en implementatie in meerdere omgevingen vereist:
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 het definiëren van het veld, voeg je het toe aan het relevante view XML-bestand zodat het in de interface verschijnt. Odoo creëert de databasekolom wanneer de module wordt geïnstalleerd of geüpgraded.
Voor berekende Boolean-velden ziet het patroon er als volgt uit:
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 in de database opgeslagen, waardoor deze beschikbaar is in zoekfilters en lijstweergave-groeperingen zonder opnieuw te berekenen bij elke paginalaad.
Het gebruik van de XML-RPC API
Als je Odoo-aanpassingen programmatisch beheert, bijvoorbeeld als onderdeel van een implementatiepipeline of een extern configuratiescript, kunnen Boolean-velden worden aangemaakt via de XML-RPC API op het ir.model.fields model:
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 state: manual waarde vertelt Odoo dat dit veld buiten een module is aangemaakt, wat de juiste instelling is voor velden die zijn aangemaakt via Studio of de API. Dit is precies hoe Dasolo de creatie van externe velden voor klanten afhandelt als onderdeel van geautomatiseerde configuratieworkflows.
Beste praktijken
1. Definieer altijd een standaardwaarde
Hoewel Odoo False retourneert voor Boolean-velden zonder standaard, is het beste praktijk om default=False expliciet in je velddefinitie te verklaren. Het communiceert de intentie duidelijk naar iedereen die de modelcode leest en voorkomt ambiguïteit wanneer het veld wordt gebruikt in geautomatiseerde acties of filters.
2. Gebruik beschrijvende namen die als vragen lezen
Boolean veldnamen werken het best wanneer ze natuurlijk lezen als een ja/nee vraag. Namen zoals is_verified, needs_approval, has_warranty, of is_key_account zijn onmiddellijk begrijpelijk. Vermijd vage namen zoals flag, status, of check, die je niets vertellen over wat het veld daadwerkelijk vertegenwoordigt.
3. Stel copy=False in voor goedkeurings- en statusvlaggen
Als je Boolean veld een staat vertegenwoordigt die niet moet worden overgedragen wanneer een record wordt gedupliceerd, bijvoorbeeld "is goedgekeurd" of "is verzonden", voeg dan altijd copy=False toe. Anders zal het dupliceren van een record de vlagwaarde kopiëren, wat kan leiden tot records die goedgekeurd of verzonden lijken terwijl ze niet door het juiste proces zijn gegaan.
4. Gebruik berekende Boolean velden voor afgeleide staten
Vermijd het schrijven van serveracties of Python-code die handmatig een Boolean veld bijwerkt als reactie op wijzigingen in andere velden. Definieer het in plaats daarvan als een berekend veld met @api.depends(). Dit houdt je logica op één plek, draait automatisch bij elke opslag, en is veel gemakkelijker te onderhouden en te debuggen dan verspreide schrijfoperaties op meerdere plaatsen in de codebase.
5. Voeg Boolean velden toe aan zoekweergaven wanneer ze worden gebruikt voor filtering
Als gebruikers regelmatig records moeten filteren op basis van een Boolean veld, voeg het dan expliciet toe aan de zoekweergave. In Studio, schakel de zoekoptie in het veld eigenschappenpaneel in. In code, voeg het toe aan de <search> weergave XML. Dit geeft gebruikers een schone filterknop in de zoekbalk in plaats van hen te dwingen elke keer geavanceerde filters te gebruiken.
Veelvoorkomende valkuilen
Boolean gebruiken voor een staat die meer dan twee opties heeft
Dit is de meest voorkomende fout die teams maken met Boolean velden. Als een record in een van de drie of meer staten kan zijn, zoals "in afwachting", "goedgekeurd", en "afgewezen", is een Boolean veld het verkeerde hulpmiddel. Je eindigt met het toevoegen van een tweede Boolean, dan een derde, en de logica wordt onmogelijk te beheren. Gebruik in plaats daarvan een Selectieveld of een juiste statusworkflow. Boolean velden zijn voor oprecht binaire situaties.
Vergeten om copy=False in te stellen op goedkeuringsvlaggen
Wanneer gebruikers records dupliceren in Odoo, worden alle veldwaarden standaard gekopieerd. Een bestelling die als "goedgekeurd" of "beoordeeld" was gemarkeerd, zal die vlaggen onmiddellijk op True hebben staan op de duplicaat. Als het gedupliceerde record vanaf een schone lei moet beginnen, voeg dan copy=False toe aan elke vlag die een voltooide actie of een bereikte staat vertegenwoordigt.
Het veld niet toevoegen aan de zoekweergave
Een Boolean-veld waarop gebruikers moeten filteren, maar dat niet in de zoekweergave staat, dwingt hen om elke keer de geavanceerde filterdialoog te openen. Dit vertraagt de dagelijkse workflows aanzienlijk. Als je een Boolean-veld toevoegt dat mensen zullen gebruiken om records te vinden, neem dan de extra stap om het tegelijkertijd aan de zoekweergave toe te voegen.
Een Boolean-veld gebruiken in plaats van het actieve veld
Odoo heeft een ingebouwd active veld op de meeste modellen dat bepaalt of records in standaardweergaven verschijnen. Als je Boolean-veld bedoeld is om records te verbergen of te archiveren, gebruik dan het native active veld en de bijbehorende toggle-mechanisme in plaats van een aangepaste zichtbaarheidoplossing te bouwen. Dit houdt je datamodel in lijn met het standaardgedrag van Odoo en werkt goed samen met de archiverings- en dearchiveringsacties die al in de UI zijn ingebouwd.
Gecomputeerde Boolean-velden zonder store=True in filters
Als je een gecomputeerd Boolean-veld maakt en het probeert te gebruiken in zoekfilters of lijstweergave-groepering zonder store=True, zal Odoo een foutmelding geven of de filter stilletjes negeren. Niet-opgeslagen gecomputeerde velden bestaan alleen in het geheugen en kunnen niet worden gebruikt in SQL-query's. Als een gecomputeerd Boolean-filterbaar of rapporteerbaar moet zijn, voeg dan altijd store=True toe aan de velddefinitie.
Conclusie
Het Boolean-veld is het soort veld dat je stopt met opmerken omdat het zo goed werkt. Het is overal in Odoo, van de active vlag die de zichtbaarheid van records controleert, tot het is_published veld dat je website aanstuurt, tot de tientallen aangepaste vlaggen die bedrijven elke dag aan hun eigen workflows toevoegen.
Begrijpen hoe het zich gedraagt in het Odoo-datamodel, hoe je het correct configureert met de juiste standaardinstellingen en attributen, en wanneer je het moet gebruiken in plaats van andere veldtypes zoals Selectie, zal je helpen om implementaties te bouwen die schoon, voorspelbaar en gemakkelijk te onderhouden zijn.
Een goed uitgevoerd Boolean-veld is onzichtbaar voor de eindgebruiker. Het werkt gewoon. Een verkeerd gebruikt Boolean-veld creëert verwarring, corrupte toestanden en een groeiende stapel oplossingen. Het verschil komt neer op het kennen van de regels en deze consequent toepassen.
Bij Dasolo helpen we bedrijven met het implementeren, aanpassen en optimaliseren van Odoo in alle afdelingen. Of je nu hulp nodig hebt bij het ontwerpen van een schoon datamodel, het toevoegen van aangepaste velden aan je workflows, of het bouwen van een volledige Odoo-module vanaf nul, ons team staat voor je klaar om je te ondersteunen. Neem contact met ons op en laten we praten over jouw Odoo-project.