Overslaan naar inhoud

Defaultwaarden in Odoo-velden: De Complete Gids

Automatisch formuliervelden invullen in Odoo: van vaste waarden tot slimme, contextgevoelige en dynamisch berekende standaardwaarden
6 maart 2026 in
Defaultwaarden in Odoo-velden: De Complete Gids
Dasolo
| Nog geen reacties

Inleiding


Elke formulierpagina in Odoo bevat velden die gebruikers moeten invullen. Niet elk veld hoeft echter telkens leeg aangevuld te worden: met een geschikte standaardwaarde start je formulier al met een nuttige invulling. De mechaniek lijkt eenvoudig, maar er zitten verschillende lagen en uitzonderingen in die je best kent wanneer je formulieren instelt voor je team.


Of je nu als businessgebruiker snel iets wilt instellen via Odoo Studio of als ontwikkelaar code schrijft, inzicht in hoe standaardwaarden werken bespaart tijd en voorkomt lastige configuratiefouten die later moeilijk te vinden zijn.


Deze gids legt uit wat standaardwaarden in Odoo precies zijn, hoe ze op ORM-niveau functioneren, wanneer je beter kiest voor vaste versus dynamische defaults en hoe je ze instelt via Studio of met Python.

Wat is een standaardwaarde in Odoo


In het Odoo-model is een standaardwaarde simpelweg de waarde die aan een veld toegewezen wordt zodra je een nieuw record aanmaakt — vóór de gebruiker iets invoert. Het is geen beperking: de gebruiker mag de waarde nog altijd overschrijven. Het doel is vooral om een logische uitgangspositie te bieden zodat formulieren meteen bruikbaar aanvoelen.


Het default-attribuut is beschikbaar voor vrijwel elk veldtype: Char, Integer, Float, Boolean, Date, Many2one, Selection, enzovoort. De default kan een vaste waarde zijn, een Python-lambda of een verwijzing naar een methode — elk heeft zijn toepassingsgebied afhankelijk van wat je nodig hebt.


In Odoo Studio vind je defaults terug in het eigenschappenpaneel van een veld als een eenvoudige invoerveld. Daardoor kunnen niet-technische gebruikers snel een statische standaard instellen zonder code te schrijven. Voor veel organisaties is dat een snelle manier om gegevens consistenter te maken zonder ontwikkelaars te betrekken.


Op databaseniveau worden defaults niet als kolomwaarden opgeslagen. Ze leven in de Python-modeldefinitie of als ir.default-records in de database, afhankelijk van hoe je ze instelt. Bij het aanmaken van een nieuw record leest Odoo die bronnen en vult het formulier voor de gebruiker in.

Hoe een standaardwaarde werkt


Wanneer je een nieuw formulier opent, roept Odoo de methode default_get() aan op het model. Die verzamelt de standaardwaarden en geeft een woordenboek terug met veldnamen en hun defaults. Het formulier gebruikt dat om velden alvast in te vullen.

Er zijn vier veelvoorkomende typen standaardwaarden in Odoo, elk geschikt voor een andere situatie.


Statische defaults

Dit zijn vaste waarden die je in de velddefinitie vastlegt of via Studio instelt. Denk aan een Boolean die standaard op True staat of een selectievak met standaardstatus 'draft'. Voor de meeste dagelijkse eisen in een Odoo-omgeving volstaat een statische default.


Dynamische defaults (lambda of methode)

Een lambda of methode die op het moment van recordcreatie uitgevoerd wordt. Zo kun je waarden laten afhangen van de huidige datum, de ingelogde gebruiker of contextinformatie. Voorbeelden: de huidige gebruiker als verantwoordelijke of de datum van vandaag als documentdatum.


In code zie je zo’n statische en dynamische default typisch terug in de Python-modeldefinitie volgens de gebruikelijke Odoo-patronen.


from odoo import fields, models

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

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

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

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

Contextgebonden defaults

Soms worden standaardwaarden via de action-context meegegeven met sleutels zoals default_field_name. Wanneer je nieuw record opent vanuit een gerelateerd object, vult Odoo die contextwaarden automatisch in. Zo opent een taak binnen een project met dat project voorgeselecteerd — een handig mechanisme voor navigatiestromen dat ontwikkelaars of power users kunnen benutten.


Gebruikersspecifieke defaults via ir.default

Odoo laat ook gebruikers- of bedrijfsspecifieke defaults toe via ir.default-records. Een administrator kan voor een specifieke gebruiker een persoonlijke standaard instellen. Die gebruikersinstelling krijgt voorrang op de model-level default en is handig wanneer verschillende teamleden andere voorkeursinstellingen hebben.


Prioriteitsvolgorde

Als meerdere bronnen een default voor hetzelfde veld aanbieden, geldt deze volgorde: eerst gebruikersspecifieke ir.default, dan bedrijfsspecifieke ir.default, daarna de default uit de Python-modeldefinitie. Defaults uit de context die bij runtime worden meegegeven overschrijven vaak model-level defaults. Deze volgorde verklaart waarom een veld soms een onverwachte waarde toont.

Praktische bedrijfsvoorbeelden


Defaults komen in bijna elk Odoo-module voor. Hieronder vijf praktische voorbeelden uit de dagelijkse bedrijfsvoering.


CRM: standaardverkoper op nieuwe leads

Wanneer een verkoper een nieuwe lead aanmaakt, staat het veld 'Verantwoordelijke' vaak standaard op de ingelogde gebruiker. Daardoor blijven leads niet onopgemerkt en hoeven ze niet handmatig toegewezen te worden. Dit eenvoudige gebruik van lambda self: self.env.user verhoogt de adoptie van het CRM omdat gebruikers hun leads meteen zien.


Verkoop: betaalvoorwaarden op bestellingen

Bij het aanmaken van een verkooporder vult Odoo automatisch prijslijst en betaalvoorwaarden op basis van de klantinstellingen. Staat een klant op 'Betaal binnen 30 dagen', dan verschijnt die keuze op nieuwe orders. Dat verkleint het risico op foutieve manuele keuzes en zorgt dat afgesproken voorwaarden consequent toegepast worden.


Magazijn: standaardlocaties bij transfers

Bij interne transfers of voorraadcorrecties vult Odoo bron- en bestemmingslocatie in volgens de magazijnconfiguratie. Magazijnmedewerkers die altijd binnen dezelfde zone werken vinden zo meteen de juiste locaties geselecteerd, wat tijd bespaart en fouten voorkomt wanneer men onder tijdsdruk werkt.


Boekhouding: standaard journaal op boekingen

Bij het aanmaken van een klantfactuur of leveranciersfactuur kiest Odoo automatisch het juiste journaal, afhankelijk van het type en de bedrijfsinstellingen. Voor een boekhouder betekent dit dat het juiste purchase- of sales-journal vooraf ingevuld is en dat de default meeschuift bij wijzigingen in de configuratie.


Project: standaardfase bij nieuwe taken

Nieuwe taken binnen een project starten doorgaans in de eerste kanban-fase van dat project. Als de taak vanuit een specifiek project wordt geopend, vult de context ook het projectveld en soms de verantwoordelijke in. Dit zorgt dat taken meteen in de juiste fase terechtkomen zonder handmatig bijsturen.

Standaardwaarden aanmaken of aanpassen


Er zijn grofweg drie manieren om defaults in te stellen: no-code via Studio, technische aanpassing met Python, of via ir.default-records.


Odoo Studio gebruiken (zonder code)

Studio biedt een visuele manier om defaults in te stellen op elk veld in je formulier. Volg deze stappen om een default via Studio te zetten:

  • Open de Studio-interface op het formulier dat je wilt aanpassen
  • Klik op het veld dat je wilt configureren
  • Zoek in het eigenschappenpaneel rechts naar de invoer voor Default Value
  • Vul de gewenste startwaarde in of kies deze
  • Sla op en verlaat Studio

Studio slaat die instelling op als een ir.default-record en is doorgaans van toepassing voor de hele database, tenzij je het specificeert per gebruiker of bedrijf. Het is bijzonder geschikt voor statische defaults op velden als Selection, Boolean, Char en Integer; bij Many2one kies je eenvoudig een bestaand record uit de lijst.

Hou er rekening mee dat een wijziging in Studio bestaande records niet aanpast: de nieuwe standaard geldt alleen voor records die je na de wijziging aanmaakt.


Python gebruiken in technische aanpassingen

Voor technische maatwerkoplossingen definieer je defaults in de velddefinitie binnen het Python-model. Dit geeft je volledige controle over statische waarden, lambdas en methodes als defaults — essentieel wanneer een default afhangen moet van runtime-info zoals gebruiker, datum of bedrijfsinstellingen.


Een voorbeeld van verschillende defaulttypen die je in een custom module zou toevoegen:


from odoo import fields, models

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

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

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

    # Dynamische default via 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 notitie',
        default=_default_note,
    )

Dit volgt de gebruikelijke Odoo-patterns en werkt voor alle veldtypes. Een methode-gebaseerde default is handig wanneer de logica complexer is dan een korte lambda.


ir.default-records programmatisch beheren

Je kunt ir.default-records ook aanmaken of bijwerken via XML-gegevensbestanden of via API-aanroepen. Dat is nuttig wanneer een module bij installatie bepaalde defaults moet configureren voor klanten. Het record bevat de modelnaam, veldnaam, waarde en optioneel de scope (bedrijf of gebruiker).


Deze aanpak zie je vooral terug in module-installatie-scripts wanneer je een installatie kant-en-klare configuratie wil meegeven.

Aanbevolen werkwijzen voor standaardwaarden in Odoo


Standaardwaarden op verplichte velden instellen

Als een veld verplicht is, geef het waar mogelijk een logische default. Dat voorkomt frustratie en save-fouten wanneer gebruikers per ongeluk een verplicht veld leeg laten. Combineer required=True met een praktische default waar dat zinvol is.


Gebruik lambdas voor datumdefaults

Kodeer nooit een vaste datum als default. Gebruik lambda self: fields.Date.today() zodat de default altijd de huidige datum is op het moment van aanmaak. Een hardcoded datum is vrijwel direct verouderd.


Houd default-logica lichtgewicht

Default-functies draaien bij iedere nieuw formulieropenening. Vermijd zware databasequeries, externe API-calls of grote berekeningen in default-methodes. Houd ze snel en simpel. Voor complexere logica kies je bij voorkeur een onchange of een compute-veld.


Gebruik context-defaults voor navigatiestromen

Bij custom acties of slimme knoppen die een nieuw formulier openen, geef defaultwaarden mee via de action-context (default_field_name) in plaats van te vertrouwen op model-level defaults. Dat volgt de native Odoo-aanpak en houdt je maatwerk consistent met het framework.


Test defaults met meerdere gebruikersprofielen

Dynamische defaults die self.env.user of self.env.company gebruiken gedragen zich anders afhankelijk van wie is ingelogd. Test altijd met minstens twee gebruikers en in multi-company-omgevingen om verrassingen te vermijden.

Veelvoorkomende valkuilen


Gebruik geen muteerbare objecten als default

De klassieke Python-valkuil geldt ook in Odoo: zet nooit default=[] of default={}. Daardoor delen records dezelfde lijst of dict, wat tot datalekken tussen records leidt. Gebruik in plaats daarvan een lambda: default=lambda self: [] zodat elke instantie een nieuw object krijgt.


Defaults triggeren geen onchange

Het instellen van een default roept geen onchange-methodes op. Als een onchange normaal gesproken andere velden bijwerkt, gebeurt dat niet door de default. Wil je die keten bij initiële invulling toch aanroepen, dan moet je ofwel default_get overschrijven of de logica elders afhandelen.


Conflicterende defaults tussen ir.default en modeldefinitie

Als zowel in Python als via Studio/ir.default een default voor hetzelfde veld bestaat, wint het ir.default-record. Dit veroorzaakt vaak verwarring nadat iemand in Studio iets aangepast heeft en daarbij per ongeluk een door ontwikkelaars ingestelde waarde overschrijft.


Aanname dat een default een verplicht veld vervangt

Een default maakt een veld niet automatisch verplicht. Als een gebruiker de waarde leegmaakt, wordt het lege veld opgeslagen. Rely niet enkel op een default voor volledigheid; gebruik required=True wanneer een waarde altijd noodzakelijk is.


Hardcoden van user- of company-ID's vermijden

Een default als default=1 die naar een gebruiker of bedrijf via ID verwijst is breekbaar: die ID verschilt tussen databases. Gebruik altijd dynamische verwijzingen zoals lambda self: self.env.company.id of lambda self: self.env.ref('module.xml_id').id.

Slotwoord


Standaardwaarden zijn klein van formaat maar groot in impact: ze schelen handwerk, brengen gebruikers naar consistente keuzes en maken formulieren aangenamer in gebruik. Of je ze snel via Studio zet of grondig in Python vastlegt, goed begrip van defaults helpt betere Odoo-implementaties bouwen.


Belangrijke aandachtspunten: defaults draaien alleen bij recordcreatie, ze activeren geen onchange-methodes, meerdere bronnen volgen een vaste prioriteitsorde en muteerbare objecten moeten altijd via een lambda gemaakt worden.


Een correcte inrichting van defaults maakt het verschil tussen een intuïtief formulier en één dat elke nieuwe record tot een frustrerende klus maakt. Het is een kleine investering met dagelijks rendement.


Bij Dasolo begeleiden we organisaties bij het implementeren, aanpassen en optimaliseren van Odoo zodat het naadloos aansluit op hun processen. Heb je hulp nodig met field defaults, custom fields of het datamodel van Odoo? We helpen graag. Neem contact met ons op en laten we samen je Odoo-implementatie bekijken.

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