Overslaan naar inhoud

Standaardwaarde in Odoo Velden: De Complete Gids

Hoe velden automatisch voor te vullen in Odoo, van statische waarden tot contextbewuste standaardwaarden en dynamische berekeningen
6 maart 2026 in
Standaardwaarde in Odoo Velden: De Complete Gids
Dasolo
| Nog geen reacties

Inleiding


Elke formulier in Odoo heeft velden. Sommige moeten elke keer handmatig worden ingevuld. Maar veel velden kunnen een zinvolle standaardwaarde krijgen, zodat gebruikers al met iets nuttigs beginnen. Het standaardwaarde-mechanisme in Odoo is op het eerste gezicht eenvoudig, maar heeft verschillende lagen die het waard zijn om te begrijpen, vooral wanneer je formulieren voor je team configureert of aanpast.


Of je nu een zakelijke gebruiker bent die een veld aanpast via Odoo Studio of een ontwikkelaar die door een Odoo-veld tutorial werkt, weten hoe standaardwaarden werken bespaart tijd en voorkomt de soort stille configuratiefouten die later moeilijk te diagnosticeren zijn.


Deze gids behandelt wat standaardwaarden zijn in Odoo, hoe ze werken op het ORM-niveau, wanneer je statische versus dynamische standaardwaarden moet gebruiken, en hoe je ze kunt configureren via Odoo Studio of Python-code.

Wat is de Standaardwaarde in Odoo


In de Odoo ORM is een standaardwaarde wat aan een veld wordt toegewezen wanneer een nieuw record wordt aangemaakt, voordat de gebruiker iets invult. Het is geen beperking. De gebruiker kan het vrijelijk wijzigen. Het is simpelweg een startpunt dat het formulier nuttiger maakt direct uit de doos.


De default parameter is beschikbaar op vrijwel elk veldtype in het Odoo-framework: Char, Integer, Float, Boolean, Date, Many2one, Selection, en anderen. Het kan een gewone waarde zijn, een Python lambda, of een methodeverwijzing. Al deze opties worden als geldige standaardmechanismen beschouwd, afhankelijk van de gebruikssituatie.


In Odoo Studio verschijnen standaardwaarden in het veld eigenschappenpaneel als een eenvoudige invoer. Zakelijke gebruikers kunnen een statische standaard instellen zonder enige code te schrijven. Dit maakt het een van de meest toegankelijke manieren om de dataconsistentie te verbeteren met behulp van Odoo Studio-velden, zonder dat ontwikkelaars betrokken hoeven te zijn.


Op het niveau van de database worden standaardwaarden niet opgeslagen in de veldkolom zelf. Ze bevinden zich ofwel in de Python-modeldefinitie of in ir.default records in de database, afhankelijk van hoe ze zijn geconfigureerd. Wanneer een nieuw record wordt aangemaakt, leest Odoo die standaardwaarden en vult het formulier vooraf in voordat de gebruiker het ziet.

Hoe de Standaardwaarde Werkt


Wanneer een gebruiker een nieuw formulier in Odoo opent, roept het framework default_get() aan op het model. Deze methode verzamelt alle veldstandaarden en retourneert een woordenboek dat veldnamen koppelt aan hun standaardwaarden. Het formulier vult vervolgens die velden vooraf in voordat de gebruiker iets doet.

Er zijn vier hoofdtypen standaardwaarden in Odoo, elk voor een ander scenario.


Statische Standaarden

Een vaste waarde die hardcoded is in de velddefinitie of ingesteld via Studio. Bijvoorbeeld, het standaard instellen van een Boolean-veld op True, of een Selection-veld op 'draft'. Dit zijn de eenvoudigste soorten en dekken de meeste dagelijkse gebruikssituaties in een Odoo-datamodel.


Dynamische Standaarden via Lambda of Methode

Een Python-functie of lambda die wordt uitgevoerd op het moment van recordcreatie. Dit maakt standaardwaarden mogelijk die afhankelijk zijn van de huidige datum, de ingelogde gebruiker, of enige andere beschikbare context. Bijvoorbeeld, het instellen van de huidige gebruiker als de standaard verantwoordelijke persoon, of het gebruik van vandaag als de standaard documentdatum.


Hier is hoe statische en dynamische standaardwaarden eruitzien in een Python-modeldefinitie, volgens het standaard Odoo-ontwikkelingspatroon:


from odoo import fields, models

class CrmLead(models.Model):
    _inherit = 'crm.lead'

    # Statische standaard
    x_priority_level = fields.Selection(
        [('low', 'Laag'), ('medium', 'Gemiddeld'), ('high', 'Hoog')],
        string='Prioriteitsniveau',
        default='medium',
    )

    # Dynamische standaard: huidige gebruiker
    x_assigned_by = fields.Many2one(
        'res.users',
        string='Toegewezen Door',
        default=lambda self: self.env.user,
    )

    # Dynamische standaard: datum van vandaag
    x_expected_date = fields.Date(
        string='Verwachte Sluitdatum',
        default=lambda self: fields.Date.today(),
    )

Contextgebaseerde Standaarden

Waarden die via de actiecontext worden doorgegeven met behulp van de default_field_name conventie. Wanneer je op 'Aanmaken' klikt vanuit een gerelateerd record, geeft Odoo vaak contextwaarden door die standaardwaarden worden voor relationele velden. Bijvoorbeeld, het openen van een nieuwe taak vanuit een project stelt automatisch het projectveld in. Dit is een onderdeel van hoe navigatiestromen werken in het Odoo-framework en het wordt volledig aangedreven door contextsleutels die elke ontwikkelaar of geavanceerde gebruiker kan configureren.


Gebruikersspecifieke Standaarden via ir.default

Odoo ondersteunt ook gebruikersspecifieke standaardwaarden via ir.default records. Een beheerder kan een persoonlijke standaard configureren voor een bepaald veld op een bepaald model. Wanneer die gebruiker een nieuw record aanmaakt, heeft hun persoonlijke standaard voorrang op de standaard op modelniveau. Dit is nuttig in omgevingen met meerdere gebruikers waar verschillende teamleden verschillende werkvoorkeuren hebben, en het is een van de minder bekende mogelijkheden van de Odoo ORM.


Prioriteitsvolgorde

Wanneer er meerdere standaardbronnen bestaan voor hetzelfde veld, lost Odoo deze op in deze volgorde: gebruikersspecifieke ir.default eerst, dan bedrijfsniveau ir.default, dan de standaard gedefinieerd in het Python-model. Contextgebaseerde standaardwaarden die tijdens runtime worden doorgegeven, overschrijven ook de standaardwaarden op modelniveau. Weten hoe deze volgorde werkt, helpt je begrijpen waarom een veld mogelijk niet de waarde toont die je verwacht wanneer je een nieuw formulier opent.

Zakelijke Gebruikscases


Standaardwaarden verschijnen in vrijwel elke module in een Odoo-implementatie. Hier zijn vijf praktische voorbeelden uit echte bedrijfsworkflows.


CRM: Standaard Verkoper op Nieuwe Leads

Wanneer een verkoper een nieuwe lead of kans aanmaakt, is het veld 'Verantwoordelijke' standaard ingesteld op de huidige gebruiker. Dit voorkomt dat elke lead onbenoemd begint en handmatige toewijzing vereist. De standaard wordt ingesteld met lambda self: self.env.user in de modeldefinitie. In de praktijk verbetert dit kleine detail de CRM-adoptie omdat gebruikers onmiddellijk hun eigen leads zien zonder extra stappen.


Verkoop: Standaard Betalingsvoorwaarden op Bestellingen

Wanneer een verkooporder voor een klant wordt aangemaakt, worden velden zoals prijslijst en betalingsvoorwaarden standaard ingesteld op basis van de configuratie van de klantpartner. Een klant die is ingesteld met Net 30 betalingsvoorwaarden, zal deze voorwaarden vooraf ingevuld hebben op elke nieuwe bestelling. Dit vermindert handmatige selectiefouten en zorgt ervoor dat de voorwaarden die met elke klant zijn afgesproken consistent worden toegepast, zelfs wanneer verschillende verkopers de bestellingen aanmaken.


Voorraad: Standaard Locaties op Overdrachten

Bij het aanmaken van een interne overdracht of voorraadcorrectie, worden de velden voor bron- en bestemmingslocatie standaard ingesteld op de locaties die zijn geconfigureerd in de magazijninstellingen. Magazijnmedewerkers die altijd binnen dezelfde zone werken, zullen de juiste locatie al geselecteerd zien wanneer ze een nieuwe overdracht openen. Dit bespaart klikken en vermindert het risico op het selecteren van de verkeerde locatie onder tijdsdruk.


Boekhouding: Standaard Journaal op Invoeren

Wanneer een gebruiker een nieuwe klantfactuur of leverancierfactuur aanmaakt, stelt Odoo standaard het juiste journaal in op basis van het type invoer en de bedrijfsconfiguratie. Een accountant die een nieuwe leverancierfactuur opent, hoeft niet elke keer handmatig het inkoopjournaal te selecteren. De standaardwaarde wordt dynamisch bepaald op basis van de bedrijfsinstellingen, niet vanuit een hardcoded waarde, wat betekent dat deze correct blijft, zelfs als de journaals later opnieuw worden geconfigureerd.


Project: Standaard Fase op Nieuwe Taken

Wanneer een nieuwe taak wordt aangemaakt binnen een project, begint deze in de eerste fase van de kanban-configuratie van dat project. Als de taak wordt aangemaakt door op een knop op een specifiek projectrecord te klikken, worden contextgebaseerde standaardwaarden ook automatisch ingevuld voor het project en soms de verantwoordelijke. Teams die Odoo gebruiken voor projectbeheer profiteren van deze standaardwaarden omdat ze ervoor zorgen dat nieuwe taken vanaf het moment van aanmaken op de juiste plek staan, zonder enige handmatige configuratie.

Standaardwaarden Maken of Aanpassen


Er zijn drie hoofdbenaderingen voor het instellen van standaardwaarden in Odoo, variërend van een no-code klikdoor in Studio tot volledige Python-controle in een aangepaste module.


Gebruik Odoo Studio (Geen Code)

Odoo Studio biedt een visuele interface voor het instellen van standaardwaarden op elk veld in uw formulieren. Om een standaardwaarde in te stellen via Studio:

  • Open de Studio-interface op het formulier dat u wilt wijzigen
  • Klik op het veld dat u wilt configureren
  • Zoek in het eigenschappenpaneel aan de rechterkant het invoerveld Standaardwaarde
  • Voer de waarde in of selecteer deze die u als startstandaard wilt
  • Sla op en verlaat Studio

Studio slaat deze configuratie op als een ir.default record in de database. Het is van toepassing op bedrijfsniveau, tenzij een beheerder een gebruikersspecifieke beperking opgeeft. Deze aanpak werkt goed voor statische standaardwaarden op Selectie-, Boolean-, Char- en Integer-velden. Voor Many2one-velden laat Studio je een bestaand record kiezen uit een dropdown. Het is een van de meest praktische toepassingen van het creëren van velden in Odoo zonder enige code te schrijven.

Een ding om in gedachten te houden: het wijzigen van de standaard via Studio nadat gebruikers al records hebben aangemaakt, werkt niet door voor die bestaande records. De nieuwe standaard is alleen van toepassing op records die na de wijziging zijn aangemaakt.


Python gebruiken in Technische Aanpassing

Voor technische Odoo-aanpassing worden standaardwaarden rechtstreeks in de velddefinitie binnen het Python-model ingesteld. Dit geeft volledige controle over statische waarden, dynamische lambdas en methode-gebaseerde standaardwaarden. Het is de voorkeur aanpak in elke Odoo-ontwikkelingsscenario waar de standaard afhankelijk is van runtime-informatie zoals de huidige gebruiker, de datum van vandaag of de bedrijfsconfiguratie.


Hier is een voorbeeld dat verschillende soorten standaardwaarden laat zien die je aan een aangepast module kunt toevoegen:


from odoo import fields, models

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

    # Statische Boolean standaard
    x_requires_review = fields.Boolean(
        string='Vereist Beoordeling',
        default=False,
    )

    # Statische Selectie standaard
    x_delivery_preference = fields.Selection(
        [('standard', 'Standaard'), ('express', 'Express')],
        string='Leveringsvoorkeur',
        default='standard',
    )

    # Dynamische standaard met behulp van een methode
    def _default_note(self):
        return self.env['ir.config_parameter'].sudo().get_param(
            'sale.default_note', default=''
        )

    x_internal_note = fields.Text(
        string='Interne Opmerking',
        default=_default_note,
    )

Dit patroon volgt de standaard Odoo Python-veldenconventie en werkt voor alle Odoo-veldtypen. De methode-gebaseerde standaard is bijzonder nuttig wanneer de logica complexer is dan een enkele lambda-expressie.


Programma's gebruiken van ir.default Records

Je kunt ook ir.default records aanmaken of bijwerken via de Odoo XML-RPC API of binnen een modulegegevensbestand. Dit is nuttig wanneer je een standaardconfiguratie verzendt als onderdeel van een installatie van een aangepaste module. Het ir.default model accepteert een modelnaam, een veldnaam, een waarde en optioneel een bedrijf of gebruiker om de standaard te beperken.


Deze aanpak is minder gebruikelijk in de dagelijkse ontwikkeling, maar komt voor bij het bouwen van installeerbare Odoo-modules die redelijke standaardwaarden moeten configureren als onderdeel van hun installatieprocedure.

Beste Praktijken voor Standaardwaarden in Odoo


Standaarden instellen op Vereiste Velden

Als een veld verplicht is, geef het dan waar mogelijk een redelijke standaardwaarde. Dit vermindert wrijving en voorkomt opslaan fouten wanneer gebruikers proberen een nieuw record in te dienen zonder te beseffen dat een veld verplicht is. Het combineren van required=True met een praktische standaard is een goed patroon in het Odoo-datamodel.


Gebruik Lambdas voor Datumstandaarden

Hardcode nooit een datum als standaardwaarde. Gebruik lambda self: fields.Date.today() zodat de standaard altijd de huidige datum is op het moment dat het record wordt aangemaakt. Een hardcoded datum zou verkeerd zijn voor elk record dat na het schrijven van de code is aangemaakt, wat in de praktijk betekent dat het bijna onmiddellijk verkeerd is.


Houd Standaardlogica Lichtgewicht

Standaardfuncties worden uitgevoerd tijdens het aanmaken van een record, wat betekent dat ze elke keer worden uitgevoerd wanneer een gebruiker een nieuw formulier opent. Vermijd het maken van databasequery's, het aanroepen van externe API's of het uitvoeren van zware berekeningen binnen standaardmethoden. Houd ze snel en eenvoudig. Als je iets complexers nodig hebt, overweeg dan om een onchange of een berekend veld te gebruiken dat wordt geactiveerd door een ander veld.


Gebruik Contextstandaarden voor Navigatiestromen

Bij het bouwen van aangepaste acties of slimme knoppen die een nieuw formulier openen, geef default_field_name waarden door via de actiecontext in plaats van te vertrouwen op statische modelstandaarden. Dit is precies hoe native Odoo-knoppen werken en houdt je Odoo-aanpassing in lijn met de conventies van het framework.


Test Standaarden met Meerdere Gebruikersprofielen

Dynamische standaarden die verwijzen naar self.env.user of self.env.company gedragen zich anders, afhankelijk van wie is ingelogd. Test altijd met minstens twee verschillende gebruikersaccounts en met verschillende bedrijfsconfiguraties als je een multi-bedrijf setup draait. Wat werkt voor een administrator kan onverwachte resultaten opleveren voor een standaardgebruiker.

Veelvoorkomende Valkuilen


Een Veranderlijk Object als Standaard Gebruiken

Dit is de klassieke Python-fout en het geldt ook voor Odoo-ontwikkeling. Schrijf nooit default=[] of default={} voor een veld. Python deelt hetzelfde lijst- of woordenboekobject over alle instanties, wat ervoor zorgt dat gegevens op onverwachte manieren tussen records 'bloeden'. Gebruik in plaats daarvan een lambda: default=lambda self: []. Dit creëert een nieuw object elke keer dat een record wordt geïnitialiseerd.


Standaarden Triggeren Geen onchange

Het instellen van een standaardwaarde activeert geen onchange methoden. Als je formulier een onchange heeft op een veld dat normaal gesproken updates op andere velden activeert, omzeilt de standaard die kettingreactie volledig. Gebruikers zullen de vooraf ingevulde waarde zien, maar geen van de downstream-effecten die onchange normaal zou produceren. Als je wilt dat de onchange wordt uitgevoerd bij initialisatie, moet je deze expliciet aanroepen in een aangepaste default_get override of de logica op een andere manier afhandelen.


Conflictueuze standaardinstellingen van ir.default en modeldefinitie

Als je een standaardwaarde zowel in Python als via Studio of een ir.default-record instelt, lost Odoo deze op volgens een prioriteitsvolgorde. Het ir.default-record heeft voorrang boven de standaardwaarde op modelniveau in Python. Dit is een veelvoorkomende bron van verwarring bij het debuggen van onverwachte veldwaarden, vooral na een wijziging in de Studio-configuratie die stilletjes iets overschrijft dat een ontwikkelaar in de code heeft ingesteld.


Een standaardwaarde betekent niet automatisch een vereiste waarde

Een veld met een standaardwaarde is niet automatisch vereist. Als de gebruiker het veld leegmaakt, wordt het leeg opgeslagen. Vertrouw niet alleen op de standaard om de volledigheid van gegevens af te dwingen. Als je altijd een waarde in dat veld nodig hebt, combineer de standaard dan met required=True.


Hardcoderen van bedrijfs- of gebruikersrecord-ID's

Een standaard zoals default=1 die naar een gebruiker of bedrijf verwijst via zijn database-ID is kwetsbaar. Het zal breken in elke omgeving waar dat record een andere ID heeft, wat in feite elke productie-database is die niet identiek is ingesteld aan de ontwikkelomgeving. Gebruik altijd dynamische verwijzingen: lambda self: self.env.company.id of lambda self: self.env.ref('module.xml_id').id.

Conclusie


Standaardwaarden zijn een kleine maar krachtige functie in het Odoo-datamodel. Ze verminderen handmatige gegevensinvoer, begeleiden gebruikers naar consistente keuzes en maken formulieren gemakkelijker te gebruiken voor iedereen in het team. Of je ze nu configureert via Odoo Studio voor een snelle no-code wijziging of ze definieert in Python als onderdeel van een technische aanpassing, begrijpen hoe standaardwaarden werken helpt je om betere Odoo-implementaties te bouwen.


De belangrijkste punten om in gedachten te houden: standaardwaarden worden alleen uitgevoerd bij het aanmaken van records, niet continu. Ze triggeren geen onchange-methoden. Meerdere standaardbronnen volgen een gedefinieerde prioriteitsvolgorde. En veranderlijke objecten zoals lijsten of woordenboeken moeten altijd in een lambda worden gewikkeld wanneer ze als standaardwaarden voor velden worden gebruikt.


De juiste standaardwaarden instellen is vaak het verschil tussen een formulier dat intuïtief aanvoelt en een formulier dat elke keer wrijving creëert voor gebruikers wanneer ze een nieuw record moeten aanmaken. Het is een kleine investering die elke dag zijn vruchten afwerpt.


Bij Dasolo helpen we bedrijven om Odoo te implementeren, aan te passen en te optimaliseren zodat het aansluit bij hun specifieke workflows. Als je hulp nodig hebt bij het configureren van veldstandaarden, het bouwen van aangepaste velden of het ontwerpen van een Odoo-datamodel dat daadwerkelijk werkt voor jouw team, helpen we je graag. Neem contact met ons op en laten we praten over jouw Odoo-implementatie.

Standaardwaarde in Odoo Velden: De Complete Gids
Dasolo 6 maart 2026
Deel deze post
Aanmelden om een reactie achter te laten