Inleiding
Als je ooit een verkooporder, een projecttaak of een productieorder in Odoo hebt geopend, heb je al gebruikgemaakt van een Datumveld. Deadlines, leverdata, vervaldatums van facturen, startdata van contracten - de meeste tijdgevoelige gegevens in Odoo worden opgeslagen met dit veldtype.
Voor zakelijke gebruikers zijn Datumvelden intuïtief: je klikt, er verschijnt een kalender, je kiest een datum. Maar er gebeurt meer onder de motorkap. Begrijpen hoe het Datumveld werkt in het Odoo-datamodel, hoe het verschilt van DatumTijd-velden, en hoe je het kunt creëren of aanpassen, zal je helpen om nauwkeurigere workflows op te bouwen en de soort tijdzone-surprises te vermijden die veel Odoo-implementaties in de war sturen.
Deze gids behandelt alles wat je moet weten over het Datumveld in Odoo, van wat het opslaat tot hoe je het effectief kunt gebruiken in je bedrijfsprocessen.
Wat is het Datumveld in Odoo
In de Odoo ORM is het fields.Date type ontworpen om kalenderdata op te slaan zonder tijdcomponent. Een datum zoals "2026-03-06" wordt exact opgeslagen zoals deze is, zonder uren, minuten of seconden.
In PostgreSQL, de database waarop Odoo draait, komt een Datumveld overeen met het DATE kolomtype. Dit is verschillend van het DateTime-veld, dat overeenkomt met TIMESTAMP en een volledige timestamp tot op de seconde bevat.
In de gebruikersinterface wordt een Datumveld weergegeven als een tekstinvoer met een kalenderkiezer. Gebruikers kunnen een datum direct typen of op het kalendericoon klikken om er een te selecteren. In lijstweergaven verschijnt het als opgemaakte tekst uitgelijnd op de locale van de gebruiker.
Hier is hoe een Datumvelddefinitie eruitziet in een aangepaste Python-module:
from odoo import fields, models
class ProjectTask(models.Model):
_inherit = 'project.task'
x_deadline_confirmed = fields.Date(
string='Bevestigde Deadline',
help='De officieel bevestigde deadline die met de klant is overeengekomen.',
)
In Odoo Studio wordt dit veld eenvoudigweg gelabeld als Datum. Wanneer het via Studio wordt aangemaakt, krijgt het automatisch een x_studio_ prefix. Wanneer het via Python-code of de XML-RPC API wordt aangemaakt, kies je zelf de technische naam.
Hoe het Veld Werkt
Datum vs. DateTime: wat verandert er eigenlijk
Het belangrijkste om te begrijpen over het Datumveld is wat het niet bevat: tijd. Er zijn geen uren, geen tijdzoneconversies, niets meer dan de kalenderdatum zelf.
Het DateTime-veld daarentegen slaat een volledige timestamp op en wordt in UTC in de database opgeslagen. Odoo converteert het vervolgens naar de lokale tijdzone van de gebruiker bij weergave. Dit is de bron van veel verwarrende "mijn datum is met één dag verschoven" bugs die teams tegenkomen. Dit zijn bijna altijd DateTime-problemen, geen Datumveldproblemen.
Wanneer je een Datumveld gebruikt, is wat je opslaat precies wat gebruikers zien. Een waarde van 2026-03-15 is 2026-03-15 voor elke gebruiker, ongeacht waar ter wereld ze zich bevinden.
Belangrijke Veldattributen
Hier zijn de belangrijkste eigenschappen die je kunt configureren op een Datumveld in het Odoo-framework:
- verplicht: Maakt het veld verplicht op zowel het interface- als modelniveau.
- standaard: Stelt een automatische standaard in. Bijvoorbeeld,
fields.Date.todaystandaard op de datum van vandaag voor nieuwe records. - index: Creëert een database-index voor snellere filtering en zoekopdrachten op dat veld.
- berekenen: Koppelt een Python-methode die de waarde dynamisch berekent.
- opslag: Wanneer gecombineerd met
berekenen, wordt de berekende waarde in de database opgeslagen. - alleen-lezen: Voorkomt dat gebruikers het veld rechtstreeks in de interface kunnen bewerken.
- kopiëren: Beheert of de waarde wordt overgenomen bij het dupliceren van een record. Standaard is
Waar.
Hoe het verschijnt in weergaven
In formulierweergaven wordt een Datumveld weergegeven als een tekstinvoer met een kalenderpop-up. In lijstweergaven wordt het weergegeven als opgemaakte tekst. In zoekweergaven ondersteunt het standaard datumreeksfilters: "deze week", "deze maand", "dit kwartaal", evenals exacte vergelijkingsoperatoren zoals voor, na en op een specifieke datum.
Het weergaveformaat volgt de taalinstellingen van de gebruiker in Odoo. Een Amerikaanse gebruiker ziet MM/DD/YYYY terwijl een Europese gebruiker DD/MM/YYYY ziet. De onderliggende opgeslagen waarde is altijd in ISO-formaat (YYYY-MM-DD), ongeacht hoe deze op het scherm verschijnt.
Interactie met de Odoo ORM
Wanneer je een Datumveld in code leest, retourneert de Odoo ORM een Python datetime.date object, of False als het veld leeg is. Bij het schrijven via de ORM kun je ofwel een datetime.date object of een string in "YYYY-MM-DD" formaat doorgeven. Via de XML-RPC API worden data altijd doorgegeven en ontvangen als strings.
Er zijn geen complexe transformaties betrokken bij het werken met Datumvelden in het Odoo datamodel. Het framework zorgt automatisch voor de opmaak en opslag, wat deel uitmaakt van wat dit veldtype zo praktisch maakt voor dagelijks gebruik in Odoo-ontwikkeling.
Zakelijke Gebruikscases
Het Datumveld komt in bijna elk onderdeel van een Odoo-implementatie voor. Hier zijn vijf praktische voorbeelden uit echte bedrijfsworkflows.
CRM: Contract Start- en Einddata
In verkoopteams die Odoo CRM gebruiken, hebben contracten vaak gedefinieerde start- en einddata. Een Datumveld op de lead of een aangepast contractmodel maakt het gemakkelijk om bij te houden wanneer deals geactiveerd worden en wanneer ze verlopen.
In combinatie met geautomatiseerde acties kun je e-mailherinneringen of statuswijzigingen triggeren wanneer een contract zijn einddatum nadert, zonder enige handmatige opvolging van het team. Dit soort automatisering is eenvoudig in te stellen en bespaart in de loop van de tijd veel gemiste verlengingen.
Verkoop: Gewenste Leverdata
Klanten vragen vaak om een specifieke leverdatum bij het plaatsen van bestellingen. Veel bedrijven voegen een "Door Klant Gewenste Datum" Datumveld toe aan verkooporders om het operationele team een duidelijke doel datum te geven om omheen te plannen.
Het gebruik van een Datumveld in plaats van DateTime houdt de gegevens eenvoudig en voorkomt verwarring over tijdzones tijdens de coördinatie in het magazijn. Het magazijnteam ziet dezelfde datum die het verkoopteam heeft ingevoerd, zonder risico op conversieproblemen.
Voorraad: Vervaldatums op Partijen
In de voedsel-, farmaceutische en chemische industrieën moeten productpartijen vervaldatums op magazijnniveau worden bijgehouden. Het partijbeheer van Odoo gebruikt Datumvelden om verval- en houdbaarheidsdata op stock.lot op te slaan.
Deze stimuleren FEFO (First Expired First Out) pickingstrategieën en geautomatiseerde waarschuwingen wanneer de voorraad de vervaldatum nadert, wat zowel de naleving van regelgeving als de productkwaliteit beschermt zonder handmatige controles te vereisen.
Boekhouding: Factuur Vervaldatums
Factuur vervaldatums in Odoo zijn Datumvelden. Ze bepalen wanneer automatische betalingsherinneringen worden verzonden, hoe achterstallige facturen worden geïdentificeerd en hoe de rapporten over verouderde schulden en vorderingen worden berekend.
Het correct instellen van deze datums is een van de meest operationeel belangrijke toepassingen van het Datumveld in het hele Odoo-datamodel. Een verkeerde vervaldatum verstoort stilletjes de cashflowtracking en de automatisering van opvolging.
HR: Onboarding, Contract- en Certificeringsdatums
HR-teams zijn sterk afhankelijk van Datumvelden voor aanstellingsdatums, einddatums van de proefperiode, start- en einddatums van contracten en vervaldatums van certificeringen. Deze waarden worden gebruikt voor geautomatiseerde e-mails, waarschuwingen en regels voor loonberekeningen.
Een goed ontworpen HR-module in Odoo is onmogelijk zonder schone, nauwkeurige Datumveldgegevens in de werknemersrecords. Deze datums zijn vaak de triggers voor enkele van de meest bedrijfskritische automatiseringen in een Odoo-opstelling.
Een Datumveld maken of aanpassen
Er zijn drie hoofdmanieren om een Datumveld aan een Odoo-model toe te voegen, afhankelijk van je technische setup en implementatieaanpak.
Odoo Studio gebruiken (Geen code)
Odoo Studio is de eenvoudigste manier om een Datumveld toe te voegen zonder enige code te schrijven. Dit is de aanbevolen aanpak voor zakelijke gebruikers en consultants die snel datatracking aan standaard Odoo-formulieren willen toevoegen:
- Open Odoo Studio vanuit het hoofdmenu.
- Navigeer naar het formulier waar je het veld wilt.
- Sleep een Datum veld van de zijbalk naar het formulier.
- Stel het label, de vereiste status en een standaardwaarde in indien nodig.
- Sla op en sluit Studio.
Studio maakt het veld met een x_studio_ voorvoegsel en voegt het onmiddellijk toe aan de formulierweergave. Er is geen database-migratie aan uw kant nodig.
Python gebruiken in een Aangepaste Module
Voor ontwikkelaars die Odoo-modules bouwen, worden Datumvelden gedefinieerd in Python-modelbestanden. Dit is de juiste aanpak voor elke aanpassing die versiebeheer nodig heeft en over meerdere omgevingen moet worden uitgerold:
from odoo import fields, models
class SaleOrder(models.Model):
_inherit = 'sale.order'
x_customer_requested_date = fields.Date(
string='Door klant gevraagde datum',
index=True,
copy=False,
help='Leverdatum gevraagd door de klant op het moment van bestelling.',
)
Nadat u het veld aan het model hebt toegevoegd, moet u het ook aan het relevante weergave-XML-bestand toevoegen, zodat het in de interface verschijnt. Odoo beheert de creatie van de databasekolom wanneer u de module installeert of bijwerkt.
De XML-RPC API gebruiken
Voor programmatic veldcreatie als onderdeel van een implementatiepipeline of een externe configuratienotebook, kunt u Datumvelden maken via de Odoo XML-RPC API:
field_id = models.execute_kw(
ODOO_DB, uid, ODOO_API_KEY,
'ir.model.fields', 'create',
[{
'name': 'x_customer_requested_date',
'field_description': 'Door klant gevraagde datum',
'model_id': model_id,
'ttype': 'date',
'state': 'manual',
}]
)
De ttype waarde voor een Datumveld is 'date'. Voor een DatumTijd veld zou het 'datetime' zijn. Het gebruik van 'manual' als de status vertelt Odoo dat dit veld handmatig is aangemaakt, niet door een module-installatie. Dit is hoe Dasolo de externe veldcreatie voor klanten beheert als onderdeel van geautomatiseerde configuratiescripts.
Beste Praktijken
1. Gebruik Datum, niet DatumTijd, wanneer tijd irrelevant is
Als het enige dat telt de kalenderdatum is (een deadline, een contractdatum, een geboortedatum, een vervaldatum), gebruik dan fields.Date. Het kiezen van DatumTijd voor puur datumgebaseerde gegevens voegt complexiteit van tijdzones toe zonder praktisch voordeel, en kan verwarrende fouten met één dag verschil veroorzaken, afhankelijk van de tijdzoneconfiguratie van de server.
2. Stel een zinvolle standaard in wanneer het logisch is
Voor velden zoals "Verwachte Leverdatum" of "Opvolgdatum" geeft het standaard instellen op vandaag of vandaag plus een aantal dagen gebruikers een zinvol startpunt. Gebruik default=fields.Date.today zonder haakjes voor een dynamische standaard die wordt geëvalueerd op het moment van recordcreatie, niet op het moment van classdefinitie.
3. Indexeer datumvelden die in rapporten en zoekfilters worden gebruikt
Als uw gebruikers regelmatig records filteren op een datumveld (achterstallige facturen, aankomende verlengingen, vervallende certificaten), voeg dan index=True toe. Bij grote datasets verbetert dit de filter- en rapportprestaties aanzienlijk. Het is een kleine wijziging met een significante impact op schaal en kost bijna niets om vooraf te implementeren.
4. Gebruik copy=False voor data die niet moeten worden overgedragen
Data zoals "Contract Startdatum" of "Vervaldatum" mogen niet worden gekopieerd wanneer een gebruiker een record dupliceert. Het toevoegen van copy=False dwingt de gebruiker om de datum expliciet in te stellen op het nieuwe record, waardoor stille fouten worden vermeden waarbij een verouderde datum aanhoudt op een gedupliceerd contract of projecttaak.
5. Voeg beperkingen toe wanneer twee datumvelden een bereik vormen
Wanneer een model een "Startdatum" en "Einddatum" paar heeft, voeg dan een Python-beperking toe met @api.constrains om ervoor te zorgen dat de einddatum niet vóór de startdatum ligt. Dit is eenvoudig te implementeren en voorkomt een hele categorie van datakwaliteitsproblemen die vervelend zijn om achteraf te diagnosticeren.
Veelvoorkomende Valstrikken
Verwarrende Datum- en DatumTijd-velden
Dit is de meest voorkomende fout bij het werken met tijdgevoelige gegevens in Odoo. DatumTijd slaat een volledige tijdstempel op in UTC en converteert bij weergave. Datum slaat alleen de kalenderdatum op zonder conversie. Het gebruik van DatumTijd wanneer je alleen een datum nodig hebt leidt tot tijdzoneproblemen: een datum die als 15 maart is ingevoerd in een UTC+2 omgeving kan als 14 maart verschijnen voor een gebruiker in UTC-5.
Gebruik altijd het eenvoudigste veldtype dat aan uw werkelijke zakelijke behoefte voldoet.
Geen rekening houden met de server tijdzone in geplande acties
Bij het bouwen van geplande acties of rapporten die filteren op een datumveld ten opzichte van "vandaag", wees ervan bewust dat fields.Date.today() de serverdatum in UTC retourneert. Voor de meeste rapportagegebruikers is dit prima, maar het kan leiden tot discrepanties van één dag voor teams in tijdzones die aanzienlijk verschillen van de server. Test datumafhankelijke automatiseringen vanuit meerdere tijdzones als uw team wereldwijd is verspreid.
Ontbrekende beperkingen op datumbereik paren
Het is gebruikelijk om implementaties te zien waar "Startdatum" en "Einddatum" als aparte velden bestaan, maar geen validatie ervoor zorgt dat de einddatum na de startdatum ligt. Dit laat ongeldige gegevens stilletjes het systeem binnenkomen, waardoor duurcalculaties, filterresultaten en rapporten worden verstoord. Voeg altijd een @api.constrains controle toe wanneer twee datums een logische reeks vormen.
Vergeten om datumvelden te indexeren die in filters worden gebruikt
Datumvelden die worden gebruikt in "achterstallige" controles, "komende deadlines" weergaven of verouderde balansrapporten worden doorgaans opgevraagd met vergelijkingen zoals "datum minder dan vandaag". Zonder index is elke dergelijke query een volledige tabelscan. Op modellen met grote recordaantallen zoals facturen, taken of voorraadbewegingen, vertragen ontbrekende indexen op datumvelden merkbaar de dagelijkse operaties in de loop van de tijd.
Data opslaan als Char-velden
Sommige teams slaan datums op als tekststrings in Char-velden om een aangepast formaat te behouden of de datumkiezer te vermijden. Dit breekt volledig de sortering, filtering, datumrekeningen en rapportage. Gebruik altijd het juiste fields.Date type. Het Odoo-framework en de database behandelen automatisch opmaak en lokalisatie, dus er is geen praktische reden om datums als platte tekst op te slaan.
FAQ
Wat is het verschil tussen een datumveld en een datumtijdveld in Odoo?
Een datumveld slaat alleen een kalenderdatum op (jaar, maand, dag) zonder tijdcomponent. Een datumtijdveld slaat een volledige tijdstempel op, inclusief uren, minuten en seconden, opgeslagen in UTC en weergegeven in de lokale tijdzone van de gebruiker. Gebruik Datum wanneer het tijdstip van de dag irrelevant is voor het bedrijfsproces. Gebruik Datumtijd wanneer u precies wilt bijhouden wanneer iets is gebeurd.
Hoe stel ik de datum van vandaag in als standaard voor een datumveld?
In Python, gebruik default=fields.Date.today zonder haakjes. Dit is een aanroepbare functie die Odoo evalueert op het moment van recordcreatie, zodat de standaard altijd de huidige datum is in plaats van een vaste datum die in de klassedefinitie is ingebakken. Selecteer in Odoo Studio "Vandaag" als de standaardwaarde in het eigenschappenpaneel van het veld.
Kan ik een Datum-veld berekenen op basis van andere veldwaarden?
Ja. Definieer het veld met compute='_compute_my_date' en schrijf een methode die is versierd met @api.depends() waarin de velden worden vermeld die de herberekening triggeren. Voer binnen de methode datumcalculaties uit met Python's datetime.date of timedelta. Voeg store=True toe als je wilt dat het resultaat in de database wordt opgeslagen voor gebruik in zoekfilters, groepering en exports.
Hoe filter ik records op een datumbereik in een Odoo-domein?
Gebruik standaard vergelijkingsoperatoren in het domein. Bijvoorbeeld, om records te vinden waar het datumveld in maart 2026 valt:
[
('x_date_field', '>=', '2026-03-01'),
('x_date_field', '<=', '2026-03-31')
]
Datumstrings in domeinen moeten altijd in ISO-formaat zijn: JJJJ-MM-DD.
Kan ik een Datum-veld verplicht maken alleen onder bepaalde voorwaarden?
Standaard Odoo handhaaft geen voorwaardelijke verplichte velden aan de backend zonder code. Je kunt attrs gebruiken in view XML om visueel een veld als verplicht te markeren op basis van andere waarden, maar echte handhaving aan de backend vereist een Python-beperking met @api.constrains. Voor eenvoudige gevallen bieden de voorwaardelijke zichtbaarheidregels van Odoo Studio een praktische vervanging zonder code te schrijven.
Conclusie
Het Datum-veld is een van de meest praktische veldtypes in het Odoo-framework. Het is eenvoudig te begrijpen, rechttoe rechtaan in gebruik, en krachtig genoeg om belangrijke bedrijfslogica aan te sturen zoals herinneringen, achterstallige controles en tijdgevoelige rapportage.
De belangrijkste dingen om mee te nemen: gebruik Datum in plaats van DatumTijd wanneer je alleen een kalenderdatum nodig hebt, begrijp hoe standaardwaarden en indexen de bruikbaarheid en prestaties verbeteren, en voeg altijd beperkingen toe wanneer twee datumvelden een bereik definiëren.
Het bouwen van schone, goed ontworpen datamodellen in Odoo begint met kleine beslissingen zoals het kiezen van het juiste veldtype. Het goed krijgen van die keuzes vanaf het begin is een van de kenmerken van een solide Odoo-implementatie, en het Datum-veld is een fundamenteel onderdeel van die puzzel.
Bij Dasolo helpen we bedrijven met de implementatie, aanpassing en optimalisatie van Odoo in alle afdelingen en bedrijfsprocessen. Of u nu hulp nodig heeft bij het ontwerpen van een schoon datamodel, het toevoegen van aangepaste velden en workflows, of het bouwen van een volledige Odoo-module vanaf nul, ons team staat voor u klaar. Neem contact met ons op en laten we praten over uw Odoo-project.