Einführung
Wenn Sie jemals einen Verkaufsauftrag, eine Projektaufgabe oder einen Fertigungsauftrag in Odoo geöffnet haben, haben Sie bereits ein Datumsfeld verwendet. Fristen, Lieferdaten, Fälligkeitsdaten von Rechnungen, Vertragsbeginn - die meisten zeitkritischen Daten in Odoo werden mit diesem Feldtyp gespeichert.
Für Geschäftsanwender sind Datumsfelder intuitiv: Sie klicken, ein Kalender erscheint, Sie wählen ein Datum aus. Aber es gibt noch mehr, was im Hintergrund passiert. Zu verstehen, wie das Datumsfeld im Odoo-Datenmodell funktioniert, wie es sich von Datums-/Uhrzeitfeldern unterscheidet und wie man es erstellt oder anpasst, wird Ihnen helfen, genauere Workflows zu erstellen und die Art von Zeitzonenüberraschungen zu vermeiden, die viele Odoo-Implementierungen ins Stolpern bringen.
Dieser Leitfaden behandelt alles, was Sie über das Datumsfeld in Odoo wissen müssen, von dem, was es speichert, bis hin dazu, wie Sie es effektiv in Ihren Geschäftsprozessen nutzen können.
Was ist das Datumsfeld in Odoo
Im Odoo ORM ist der Typ fields.Date dafür ausgelegt, Kalenderdaten ohne Zeitkomponente zu speichern. Ein Datum wie "2026-03-06" wird genau so gespeichert, ohne Stunden, Minuten oder Sekunden.
In PostgreSQL, der Datenbank, auf der Odoo läuft, entspricht ein Datumsfeld dem Spaltentyp DATE. Dies unterscheidet sich vom Datetime-Feld, das auf TIMESTAMP abgebildet wird und einen vollständigen Zeitstempel bis zur Sekunde enthält.
In der Benutzeroberfläche wird ein Datumsfeld als Texteingabe mit einem Kalenderpicker dargestellt. Benutzer können entweder ein Datum direkt eingeben oder auf das Kalendersymbol klicken, um eines auszuwählen. In Listenansichten erscheint es als formatierter Text, der an die Locale des Benutzers angepasst ist.
So sieht eine Datumsfelddefinition in einem benutzerdefinierten Python-Modul aus:
from odoo import fields, models
class ProjectTask(models.Model):
_inherit = 'project.task'
x_deadline_confirmed = fields.Date(
string='Bestätigtes Fälligkeitsdatum',
help='Das offiziell bestätigte Fälligkeitsdatum, das mit dem Kunden vereinbart wurde.',
)
In Odoo Studio wird dieses Feld einfach als Datum bezeichnet. Wenn es über Studio erstellt wird, erhält es automatisch ein x_studio_-Präfix. Wenn es über Python-Code oder die XML-RPC-API erstellt wird, wählen Sie den technischen Namen selbst.
Wie das Feld funktioniert
Datum vs. Datum und Uhrzeit: Was ändert sich tatsächlich
Das Wichtigste, was man über das Datumsfeld verstehen muss, ist, was es nicht enthält: Zeit. Es gibt keine Stunden, keine Zeitzonen-Konvertierungen, nichts über das Kalenderdatum selbst hinaus.
Das Datetime-Feld hingegen speichert einen vollständigen Zeitstempel und wird in der Datenbank in UTC gespeichert. Odoo konvertiert es dann zur lokalen Zeitzone des Benutzers bei der Anzeige. Dies ist die Quelle vieler verwirrender "mein Datum hat sich um einen Tag verschoben"-Fehler, die Teams begegnen. Diese sind fast immer Probleme mit dem Datetime-Feld, nicht mit dem Datumsfeld.
Wenn Sie ein Datumsfeld verwenden, speichern Sie genau das, was die Benutzer sehen. Ein Wert von 2026-03-15 ist für jeden Benutzer 2026-03-15, unabhängig davon, wo auf der Welt sie sich befinden.
Wichtige Feldattribute
Hier sind die wichtigsten Eigenschaften, die Sie für ein Datumsfeld im Odoo-Framework konfigurieren können:
- required: Macht das Feld sowohl auf der Benutzeroberfläche als auch auf der Modellebene erforderlich.
- default: Setzt einen automatischen Standardwert. Zum Beispiel,
fields.Date.todayhat als Standardwert das heutige Datum für neue Datensätze. - index: Erstellt einen Datenbankindex für schnellere Filterung und Suche in diesem Feld.
- compute: Verknüpft eine Python-Methode, die den Wert dynamisch berechnet.
- store: Wenn kombiniert mit
compute, wird der berechnete Wert in der Datenbank gespeichert. - readonly: Verhindert, dass Benutzer das Feld direkt in der Benutzeroberfläche bearbeiten.
- copy: Steuert, ob der Wert beim Duplizieren eines Datensatzes übernommen wird. Standardmäßig auf
True.
Wie es in Ansichten erscheint
In Formularansichten wird ein Datumsfeld als Texteingabe mit einem Kalender-Popup dargestellt. In Listenansichten wird es als formatierter Text angezeigt. In Suchansichten unterstützt es standardmäßig Datumsbereichsfilter: "diese Woche", "diesen Monat", "dieses Quartal", sowie genaue Vergleichsoperatoren wie vor, nach und an einem bestimmten Datum.
Das Anzeigeformat folgt den Spracheinstellungen des Benutzers in Odoo. Ein amerikanischer Benutzer sieht MM/DD/YYYY, während ein europäischer Benutzer DD/MM/YYYY sieht. Der zugrunde liegende gespeicherte Wert ist immer im ISO-Format (YYYY-MM-DD), unabhängig davon, wie er auf dem Bildschirm erscheint.
Interaktion mit dem Odoo ORM
Beim Lesen eines Datumsfeldes im Code gibt das Odoo ORM ein Python datetime.date Objekt zurück oder False, wenn das Feld leer ist. Beim Schreiben über das ORM können Sie entweder ein datetime.date Objekt oder einen String im Format "YYYY-MM-DD" übergeben. Über die XML-RPC API werden Daten immer als Strings übergeben und empfangen.
Bei der Arbeit mit Datumsfeldern im Odoo-Datenmodell sind keine komplexen Transformationen erforderlich. Das Framework kümmert sich automatisch um die Formatierung und Speicherung, was einen Teil dessen ausmacht, was diesen Feldtyp so praktisch für die tägliche Nutzung in der Odoo-Entwicklung macht.
Geschäftsanwendungsfälle
Das Datumsfeld erscheint in fast jedem Teil einer Odoo-Implementierung. Hier sind fünf praktische Beispiele aus realen Geschäftsabläufen.
CRM: Vertragsbeginn- und -enddaten
In Vertriebsteams, die Odoo CRM verwenden, haben Verträge oft definierte Anfangs- und Enddaten. Ein Datumsfeld im Lead oder in einem benutzerdefinierten Vertragsmodell erleichtert es, nachzuvollziehen, wann Geschäfte aktiviert werden und wann sie ablaufen.
In Kombination mit automatisierten Aktionen können Sie E-Mail-Erinnerungen oder Statusänderungen auslösen, wenn ein Vertrag sich dem Enddatum nähert, ohne dass das Team manuell nachfassen muss. Diese Art der Automatisierung ist einfach einzurichten und spart im Laufe der Zeit viele verpasste Verlängerungen.
Vertrieb: Gewünschte Lieferdaten
Kunden fordern häufig ein bestimmtes Lieferdatum bei der Bestellung an. Viele Unternehmen fügen ein "Kundenwunschdatum" Datumsfeld in Verkaufsaufträgen hinzu, um dem Operationsteam ein klares Ziel-Datum zur Planung zu geben.
Die Verwendung eines Datumsfeldes anstelle von DateTime hält die Daten einfach und vermeidet Verwirrung bei Zeitzonen während der Lagerkoordination. Das Lagerteam sieht dasselbe Datum, das das Vertriebsteam eingegeben hat, ohne Risiko von Umrechnungsproblemen.
Inventar: Verfallsdaten auf Chargen
In der Lebensmittel-, Pharma- und Chemieindustrie müssen Produktchargen Verfallsdaten auf Lagerebene verfolgt werden. Odoos Chargenverwaltung verwendet Datumsfelder, um Verfalls- und Mindesthaltbarkeitsdaten auf stock.lot zu speichern.
Diese treiben FEFO (First Expired First Out) Picking-Strategien und automatisierte Warnungen an, wenn der Bestand sich dem Ablaufdatum nähert, und schützen sowohl die regulatorische Compliance als auch die Produktqualität, ohne manuelle Kontrollen zu erfordern.
Buchhaltung: Fälligkeitstermine von Rechnungen
Fälligkeitstermine von Rechnungen in Odoo sind Datumsfelder. Sie bestimmen, wann automatische Zahlungserinnerungen gesendet werden, wie überfällige Rechnungen identifiziert werden und wie die Berichte über die alternden Verbindlichkeiten und Forderungen berechnet werden.
Diese Daten korrekt zu erfassen, ist eine der operationell wichtigsten Anwendungen des Datumsfeldes im gesamten Odoo-Datenmodell. Ein falsches Fälligkeitsdatum unterbricht stillschweigend die Nachverfolgung des Cashflows und die Automatisierung von Follow-ups.
HR: Einarbeitung, Vertrags- und Zertifizierungsdaten
HR-Teams verlassen sich stark auf Datumsfelder für Einstellungsdaten, Enddaten der Probezeit, Vertragsbeginn- und -enddaten sowie Ablaufdaten von Zertifikaten. Diese Werte fließen in automatisierte E-Mails, Warnungen und Regeln zur Lohnabrechnung ein.
Ein gut gestaltetes HR-Modul in Odoo ist ohne saubere, genaue Datumsfelddaten in den Mitarbeiterakten unmöglich. Diese Daten sind oft die Auslöser für einige der geschäftskritischsten Automatisierungen in einer Odoo-Installation.
Erstellen oder Anpassen des Datumsfeldes
Es gibt drei Hauptmethoden, um ein Datumsfeld zu einem Odoo-Modell hinzuzufügen, abhängig von Ihrem technischen Setup und Ihrem Bereitstellungsansatz.
Verwendung von Odoo Studio (Keine Programmierung)
Odoo Studio ist der einfachste Weg, ein Datumsfeld hinzuzufügen, ohne Code zu schreiben. Dies ist der empfohlene Ansatz für Geschäftsbenutzer und Berater, die schnell eine Datumsverfolgung zu den Standard-Odoo-Formularen hinzufügen möchten:
- Öffnen Sie Odoo Studio aus dem Hauptmenü.
- Navigieren Sie zu dem Formular, in dem Sie das Feld hinzufügen möchten.
- Ziehen Sie ein Datum-Feld aus der Seitenleiste auf das Formular.
- Legen Sie das Label, den erforderlichen Status und einen Standardwert fest, falls erforderlich.
- Speichern und schließen Sie Studio.
Studio erstellt das Feld mit einem x_studio_-Präfix und fügt es sofort der Formularansicht hinzu. Es ist keine Datenbankmigration Ihrerseits erforderlich.
Verwendung von Python in einem benutzerdefinierten Modul
Für Entwickler, die Odoo-Module erstellen, werden Datumsfelder in Python-Modell-Dateien definiert. Dies ist der richtige Ansatz für jede Anpassung, die versionskontrolliert und in mehreren Umgebungen bereitgestellt werden muss:
from odoo import fields, models
class SaleOrder(models.Model):
_inherit = 'sale.order'
x_customer_requested_date = fields.Date(
string='Kundenanforderungsdatum',
index=True,
copy=False,
help='Lieferdatum, das der Kunde zum Zeitpunkt der Bestellung angefordert hat.',
)
Nachdem Sie das Feld zum Modell hinzugefügt haben, müssen Sie es auch zur relevanten XML-Datei der Ansicht hinzufügen, damit es in der Benutzeroberfläche erscheint. Odoo kümmert sich um die Erstellung der Datenbankspalte, wenn Sie das Modul installieren oder aktualisieren.
Verwendung der XML-RPC-API
Für die programmgesteuerte Erstellung von Feldern im Rahmen einer Bereitstellungspipeline oder eines Remote-Konfigurationsnotebooks können Sie Datumsfelder über die Odoo XML-RPC-API erstellen:
field_id = models.execute_kw(
ODOO_DB, uid, ODOO_API_KEY,
'ir.model.fields', 'create',
[{
'name': 'x_customer_requested_date',
'field_description': 'Kundenanforderungsdatum',
'model_id': model_id,
'ttype': 'date',
'state': 'manual',
}]
)
Der ttype-Wert für ein Datumsfeld ist 'date'. Für ein DateTime-Feld wäre es 'datetime'. Die Verwendung von 'manual' als Zustand teilt Odoo mit, dass dieses Feld manuell erstellt wurde, nicht durch die Installation eines Moduls. So verwaltet Dasolo die Erstellung von Remote-Feldern für Kunden im Rahmen automatisierter Konfigurationsskripte.
Best Practices
1. Verwenden Sie Datum, nicht DatumZeit, wenn die Uhrzeit irrelevant ist
Wenn das einzige, was zählt, das Kalenderdatum ist (eine Frist, ein Vertragsdatum, ein Geburtsdatum, ein Ablaufdatum), verwenden Sie fields.Date. Die Wahl von DatumZeit für rein datumsbasierte Daten fügt Komplexität durch Zeitzonen hinzu, ohne praktischen Nutzen, und kann verwirrende Fehler um einen Tag verursachen, abhängig von der Zeitzoneneinstellung des Servers.
2. Setzen Sie einen sinnvollen Standard, wenn es sinnvoll ist
Für Felder wie "Erwartetes Lieferdatum" oder "Nachverfolgungsdatum" gibt es den Benutzern einen sinnvollen Ausgangspunkt, wenn man auf heute oder heute plus eine Anzahl von Tagen standardisiert. Verwenden Sie default=fields.Date.today ohne Klammern für einen dynamischen Standard, der zur Zeit der Erstellung des Datensatzes ausgewertet wird, nicht zur Zeit der Klassendefinition.
3. Indizieren Sie Datumsfelder, die in Berichten und Suchfiltern verwendet werden
Wenn Ihre Benutzer regelmäßig Datensätze nach einem Datumsfeld filtern (überfällige Rechnungen, bevorstehende Erneuerungen, ablaufende Zertifikate), fügen Sie index=True hinzu. Bei großen Datensätzen verbessert dies die Filter- und Berichtleistung dramatisch. Es ist eine kleine Änderung mit erheblichem Einfluss im großen Maßstab und kostet fast nichts, um sie im Voraus zu implementieren.
4. Verwenden Sie copy=False für Daten, die nicht übertragen werden sollen
Daten wie "Vertragsbeginn" oder "Ablaufdatum" sollten nicht kopiert werden, wenn ein Benutzer einen Datensatz dupliziert. Das Hinzufügen von copy=False zwingt den Benutzer, das Datum ausdrücklich im neuen Datensatz festzulegen, wodurch stille Fehler vermieden werden, bei denen ein veraltetes Datum in einem duplizierten Vertrag oder Projektauftrag bestehen bleibt.
5. Fügen Sie Einschränkungen hinzu, wenn zwei Datumsfelder einen Bereich bilden
Wann immer ein Modell ein "Startdatum" und ein "Enddatum"-Paar hat, fügen Sie eine Python-Einschränkung mit @api.constrains hinzu, um sicherzustellen, dass das Enddatum nicht vor dem Startdatum liegt. Dies ist einfach zu implementieren und verhindert eine ganze Kategorie von Datenqualitätsproblemen, die nachträglich ärgerlich zu diagnostizieren sind.
Häufige Fallstricke
Verwirrende Datum- und DatumZeit-Felder
Dies ist der häufigste Fehler beim Arbeiten mit zeitkritischen Daten in Odoo. DatumZeit speichert einen vollständigen Zeitstempel in UTC und konvertiert bei der Anzeige. Datum speichert nur das Kalenderdatum ohne Konvertierung. Die Verwendung von DatumZeit, wenn Sie nur ein Datum benötigen, führt zu Problemen mit Zeitzonen: Ein am 15. März in einer UTC+2-Umgebung eingegebenes Datum kann für einen UTC-5-Benutzer als 14. März erscheinen.
Verwenden Sie immer den einfachsten Feldtyp, der Ihren tatsächlichen geschäftlichen Anforderungen entspricht.
Nichtberücksichtigung der Serverzeitzone bei geplanten Aktionen
Beim Erstellen von geplanten Aktionen oder Berichten, die auf einem Datumsfeld relativ zu "heute" filtern, beachten Sie, dass fields.Date.today() das Serverdatum in UTC zurückgibt. Für die meisten Berichtsverwendungsfälle ist dies in Ordnung, kann jedoch zu ein-tägigen Abweichungen für Teams in Zeitzonen führen, die erheblich von dem Server abweichen. Testen Sie datumsabhängige Automatisierungen aus mehreren Zeitzonen, wenn Ihr Team global verteilt ist.
Fehlende Einschränkungen bei Datumsbereichspaaren
Es ist üblich, Implementierungen zu sehen, bei denen "Startdatum" und "Enddatum" als separate Felder existieren, aber keine Validierung sicherstellt, dass das Enddatum nach dem Startdatum liegt. Dies lässt ungültige Daten leise in das System gelangen, wodurch Dauerberechnungen, Filterergebnisse und Berichte beeinträchtigt werden. Fügen Sie immer eine @api.constrains-Überprüfung hinzu, wenn zwei Daten einen logischen Bereich bilden.
Vergessen, Datumsfelder, die in Filtern verwendet werden, zu indizieren
Datumsfelder, die in "überfälligen" Prüfungen, "kommenden Fristen"-Ansichten oder Berichten über alte Salden verwendet werden, werden typischerweise mit Vergleichen wie "Datum kleiner als heute" abgefragt. Ohne einen Index ist jede solche Abfrage ein vollständiger Tabellenscan. Bei Modellen mit großen Datensätzen wie Rechnungen, Aufgaben oder Lagerbewegungen verlangsamen fehlende Indizes auf Datumsfeldern die täglichen Abläufe im Laufe der Zeit merklich.
Datumsangaben als Char-Felder speichern
Einige Teams speichern Datumsangaben als Textzeichenfolgen in Char-Feldern, um ein benutzerdefiniertes Format beizubehalten oder den Datumsauswähler zu vermeiden. Dies bricht vollständig die Sortierung, Filterung, Datumsarithmetik und Berichterstattung. Verwenden Sie immer den richtigen fields.Date-Typ. Das Odoo-Framework und die Datenbank übernehmen automatisch die Formatierung und Lokalisierung, sodass es keinen praktischen Grund gibt, Datumsangaben als einfachen Text zu speichern.
FAQ
Was ist der Unterschied zwischen einem Datumsfeld und einem Datumszeitfeld in Odoo?
Ein Datumsfeld speichert nur ein Kalenderdatum (Jahr, Monat, Tag) ohne Zeitkomponente. Ein Datumszeitfeld speichert einen vollständigen Zeitstempel einschließlich Stunden, Minuten und Sekunden, der in UTC gespeichert und in der lokalen Zeitzone des Benutzers angezeigt wird. Verwenden Sie Datum, wenn die Tageszeit für den Geschäftsprozess irrelevant ist. Verwenden Sie Datumszeit, wenn Sie genau verfolgen müssen, wann etwas passiert ist.
Wie setze ich das heutige Datum als Standard für ein Datumsfeld?
In Python verwenden Sie default=fields.Date.today ohne Klammern. Dies ist ein aufrufbarer Wert, den Odoo zum Zeitpunkt der Erstellung des Datensatzes auswertet, sodass der Standard immer das aktuelle Datum ist und nicht ein festes Datum, das bei der Klassendefinition festgelegt wurde. Wählen Sie im Odoo Studio "Heute" als Standardwert im Eigenschaftenbereich des Feldes aus.
Kann ich ein Datumsfeld basierend auf anderen Feldwerten berechnen?
Ja. Definieren Sie das Feld mit compute='_compute_my_date' und schreiben Sie eine Methode, die mit @api.depends() dekoriert ist und die Felder auflistet, die die Neuberechnung auslösen. Führen Sie innerhalb der Methode Datumsberechnungen mit Pythons datetime.date oder timedelta durch. Fügen Sie store=True hinzu, wenn Sie möchten, dass das Ergebnis in der Datenbank gespeichert wird, um es in Suchfiltern, Gruppierungen und Exporten zu verwenden.
Wie filtere ich Datensätze nach einem Datumsbereich in einer Odoo-Domäne?
Verwenden Sie die standardmäßigen Vergleichsoperatoren in der Domäne. Zum Beispiel, um Datensätze zu finden, bei denen das Datumsfeld im März 2026 liegt:
[
('x_date_field', '>=', '2026-03-01'),
('x_date_field', '<=', '2026-03-31')
]
Datumszeichenfolgen in Domänen sollten immer im ISO-Format vorliegen: YYYY-MM-DD.
Kann ich ein Datumsfeld nur unter bestimmten Bedingungen verpflichtend machen?
Das Standard-Odoo erzwingt keine bedingten Pflichtfelder im Backend ohne Code. Sie können attrs in der XML-Ansicht verwenden, um ein Feld visuell als erforderlich zu kennzeichnen, basierend auf anderen Werten, aber die tatsächliche Durchsetzung im Backend benötigt eine Python-Beschränkung mit @api.constrains. Für einfache Fälle bieten die bedingten Sichtbarkeitsregeln von Odoo Studio einen praktischen Ersatz, ohne Code schreiben zu müssen.
Fazit
Das Datumsfeld ist einer der praktischsten Feldtypen im Odoo-Framework. Es ist einfach zu verstehen, unkompliziert zu verwenden und leistungsstark genug, um wichtige Geschäftslogik wie Erinnerungen, Überfälligkeitsprüfungen und zeitkritische Berichterstattung zu steuern.
Die wichtigsten Punkte, die Sie mitnehmen sollten: Verwenden Sie Datum anstelle von Datum und Uhrzeit, wenn Sie nur ein Kalenderdatum benötigen, verstehen Sie, wie Standardwerte und Indizes die Benutzerfreundlichkeit und Leistung verbessern, und fügen Sie immer Einschränkungen hinzu, wenn zwei Datumsfelder einen Bereich definieren.
Der Aufbau sauberer, gut gestalteter Datenmodelle in Odoo beginnt mit kleinen Entscheidungen wie der Auswahl des richtigen Feldtyps. Diese von Anfang an richtig zu treffen, ist eines der Merkmale einer soliden Odoo-Implementierung, und das Datumsfeld ist ein grundlegendes Element dieses Puzzles.
Bei Dasolo helfen wir Unternehmen, Odoo in allen Abteilungen und Geschäftsprozessen zu implementieren, anzupassen und zu optimieren. Egal, ob Sie Unterstützung bei der Gestaltung eines sauberen Datenmodells, dem Hinzufügen von benutzerdefinierten Feldern und Workflows oder dem Erstellen eines vollständigen Odoo-Moduls von Grund auf benötigen, unser Team ist hier, um zu helfen. Kontaktieren Sie uns und lassen Sie uns über Ihr Odoo-Projekt sprechen.