Zum Inhalt springen

Dynamische Datumsfilter in Odoo 19: Die neue Syntax für Domains

Dynamische Datumsfilter werden in Odoo für viele alltägliche Abfragen benötigt: Welche Aufgaben sind überfällig, was ist diese Woche fällig und welche Datensätze wurden erst vor wenigen Minuten erstellt? Odoo 19 vereinfacht solche Filter in Domains deutlich. Statt längerer Ausdrücke mit `context_today()` und `relativedelta` reichen kompakte Angaben wie `today`, `today -7d` oder `now -5M`. Dadurch bleiben relative Zeiträume leichter nachvollziehbar und gespeicherte Filter beziehen sich weiterhin dynamisch auf das aktuelle Datum. In diesem Beitrag zeigen wir anhand konkreter Beispiele, wie die neue Syntax funktioniert und wie Sie sie in Filtern, Aktionen und Datensatzregeln einsetzen.

Warum dynamische Datumsfilter in Odoo 19 einfacher werden

Domains legen in Odoo fest, welche Datensätze eine Suche berücksichtigt. Bei Datumsfeldern geht es häufig um Fragen wie diese: Welche Aufgaben sind überfällig, was ist diese Woche fällig und welche Datensätze wurden in den letzten Minuten erstellt?


Bis Odoo 18 wurden solche Bedingungen häufig mit context_today() und relativedelta formuliert. Deshalb waren selbst einfache Datumsfilter häufig lang und schwer lesbar. Besonders bei gespeicherten Filtern war es wichtig, darauf zu achten, dass sich der Zeitraum weiterhin dynamisch auf das aktuelle Datum bezieht.


Odoo 19 vereinfacht diese Logik mit relativen Datumsangaben direkt in der Domain. Ausdrücke wie today, today -7d oder now -5M beschreiben den gewünschten Zeitraum unmittelbar. Dadurch sind Domains kompakter, leichter verständlich und einfacher zu pflegen.

today und now in Odoo 19 richtig einsetzen

Dynamische Datumsausdrücke in Odoo 19 beginnen mit einem Bezugspunkt. Dafür stehen today und now zur Verfügung. today steht für den aktuellen Kalendertag ohne Uhrzeit und eignet sich deshalb für Datumsfelder wie Deadlines oder Fälligkeitstermine. now bezeichnet dagegen den aktuellen Zeitpunkt inklusive Uhrzeit und ist für Felder mit Datum und Uhrzeit wie create_date oder write_date gedacht.


Bei kurzen Zeiträumen kann der Bezugspunkt auch entfallen, denn now -1H und -1H haben beispielsweise die gleiche Bedeutung und eignen sich für Filter der letzten Stunde oder der letzten Minuten. Bei Kalendertagen sollten Sie dagegen ausdrücklich today verwenden, denn +3d rechnet vom aktuellen Zeitpunkt inklusive Uhrzeit aus, während today +3d vom aktuellen Kalendertag ausgeht. Bei Datumsfeldern setzen Sie immer today, da sich der Tag sonst durch die Umrechnung nach UTC verschiebt.


Die einfache Merkregel lautet, dass Sie bei Tagen today und bei Uhrzeiten now verwenden. Lassen Sie den Bezugspunkt am besten nur dann weg, wenn Sie bewusst mit kurzen Zeiträumen wie Minuten oder Stunden arbeiten.

Offsets und Zeiteinheiten in Odoo 19

Mit Offsets verschieben Sie einen Bezugspunkt wie today oder now um einen bestimmten Zeitraum, wobei die einzelnen Angaben durch Leerzeichen getrennt werden. Zwischen Vorzeichen und Zahl steht dagegen kein Leerzeichen, weshalb +3d gültig ist und + 3d nicht.

 

Für die Berechnung verwendet Odoo 19 drei Präfixe. + addiert einen Zeitraum, - zieht ihn ab und = setzt die angegebene Einheit auf einen bestimmten Wert. So steht =1d für den ersten Tag des Monats und =8H für 08:00 Uhr.

 

Für Zeiträume stehen verschiedene Einheiten zur Verfügung: d für Tag, w für Woche, m für Monat, y für Jahr, H für Stunde, M für Minute und S für Sekunde. Achten Sie besonders auf die Groß- und Kleinschreibung: m steht für Monat, M für Minute.

 

Auch Wochentage lassen sich in dynamischen Datumsausdrücken verwenden, wobei =monday den Bezug auf den Montag der aktuellen Woche setzt und +monday auf den nächsten Montag verweist und unverändert bleibt, wenn der aktuelle Tag bereits ein Montag ist. Mit =week_start lässt sich außerdem der Wochenbeginn entsprechend der Spracheinstellung des Benutzers bestimmen.

Praktische Beispiele für dynamische Datumsfilter

Mit der neuen Syntax lassen sich typische Datumsfilter direkt und kompakt in Domains abbilden. Für überfällige Aufgaben vergleichen Sie beispielsweise date_deadline mit today. Bei Datetime-Feldern wie create_date definieren Sie dagegen einen Zeitraum mit einer unteren und einer oberen Grenze.

 

Für den aktuellen Monat beginnt der Zeitraum am ersten Tag des Monats und endet am ersten Tag des Folgemonats. Dadurch funktioniert der Filter unabhängig davon, ob ein Monat 28, 30 oder 31 Tage hat. Auch Wochen, zurückliegende Zeiträume oder einzelne Uhrzeiten lassen sich nach dem gleichen Prinzip abbilden.

 

# Überfällige Aufgaben

[('date_deadline', '<', 'today')]


# Heute – ganzer Kalendertag bei einem Datetime-Feld

[('create_date', '>=', 'today'), ('create_date', '<', 'today +1d')]


# Aktuelle Woche

[('date', '>=', 'today =week_start'), ('date', '<', 'today =week_start +1w')]


# Aktueller Monat

[('date', '>=', 'today =1d'), ('date', '<', 'today +1m =1d')]


# Letzter Monat

[('date', '>=', 'today =1d -1m'), ('date', '<', 'today =1d')]


# Monat bis heute

[('date', '>=', 'today =1d'), ('date', '<', 'today +1d')]


# Letzte 7 Tage – ohne den heutigen Tag

[('create_date', '>=', 'today -7d'), ('create_date', '<', 'today')]


# Letzte Stunde

[('write_date', '>=', 'now -1H')]

 

# Letzte 5 Minuten

[('write_date', '>=', 'now -5M')]


# Heute ab 8 Uhr

[('start_datetime', '>=', 'today =8H')]

 

Die letzten sieben Tage entsprechen der Odoo-Oberfläche: Der Zeitraum reicht von today -7d bis vor today. Der laufende Tag zählt dabei nicht mit.

Date und Datetime in Odoo 19 richtig unterscheiden

Odoo unterscheidet zwischen Date-Feldern, die nur einen Kalendertag speichern, und Datetime-Feldern, die zusätzlich eine Uhrzeit enthalten. Bei Date-Feldern reicht deshalb häufig ein Vergleich mit today. Bei Datetime-Feldern müssen Sie dagegen darauf achten, den gesamten gewünschten Zeitraum abzudecken.

 

Für den heutigen Tag setzen Sie eine untere Grenze mit today und eine obere Grenze mit < today +1d. So umfasst der Filter den gesamten Kalendertag. Ein Vergleich mit <= today würde dagegen bereits um Mitternacht enden. Ein Datensatz mit einem Zeitstempel von 09:00 Uhr würde damit nicht mehr in den Filter fallen.

 

# Ganzer heutiger Tag

[('create_date', '>=', 'today'), ('create_date', '<', 'today +1d')]


# Endet bereits um Mitternacht

[('create_date', '<=', 'today')]

 

Die entscheidende Regel lautet daher: Bei Date-Feldern genügt häufig today. Bei Datetime-Feldern definieren Sie den gewünschten Zeitraum mit einer passenden oberen Grenze.

Weniger Aufwand mit dynamischen Datumsfiltern

Odoo 19 macht dynamische Datumsfilter in Domains kürzer und nachvollziehbarer. Mit `today` und `now` lassen sich relative Zeiträume ohne `context_today()` und `relativedelta` abbilden. Entscheidend ist dabei die Unterscheidung zwischen Kalendertag und Zeitpunkt: Während `today` für Datumsangaben verwendet wird, kommt `now` bei zeitbezogenen Filtern zum Einsatz. Bei Datetime-Feldern sorgt eine passende obere Grenze mit `<` dafür, dass der gewünschte Zeitraum korrekt abgebildet wird.

 

Als Odoo Gold Partner begleitet Intero Technologies Sie beim Upgrade auf Odoo 19. Wir migrieren bestehende Filter, Aktionen und Datensatzregeln auf die neue Syntax und prüfen gemeinsam, wo relative Zeiträume den Arbeitsalltag vereinfachen. So setzen Sie die neuen Möglichkeiten gezielt in Ihren konkreten Prozessen ein.


Haben Sie Fragen zu Odoo?




Vereinbaren Sie jetzt Ihren Termin für ein Erstgespräch – schnell und einfach online!



in Odoo
Fertigung und Lager effizienter steuern mit Odoo 20