Zum Inhalt springen

Odoo Date Field: Alles, was Sie wissen müssen

Alles Wissenswerte zum Datumsfeld im Odoo-Datenmodell: von den Grundlagen bis zu technischen Anpassungen
6. März 2026 durch
Odoo Date Field: Alles, was Sie wissen müssen
Dasolo
| Noch keine Kommentare

Einführung


Wenn Sie schon einmal eine Verkaufsbestellung, eine Projektaufgabe oder einen Fertigungsauftrag in Odoo geöffnet haben, sind Sie dem Datumsfeld begegnet. Liefertermine, Fälligkeitsdaten von Rechnungen, Beginn- und Enddaten von Verträgen – zeitbezogene Informationen werden in Odoo meist mit genau diesem Feldtyp verwaltet.

Für Anwender ist das Datumsfeld banal: anklicken, Kalender wählen, fertig. Hinter den Kulissen steckt aber mehr: das Datumsfeld verhält sich anders als ein Zeitstempel. Wer weiß, wie es im Odoo-Datenmodell arbeitet, wann man Date statt DateTime einsetzen sollte und wie man es richtig anlegt, verhindert unnötige Probleme mit Zeitzonen, Automatisierungen und Berichten.

Dieser Leitfaden erklärt kompakt und praxisnah, worauf es beim Datumsfeld in Odoo ankommt: was es speichert, wie es in Ansichten wirkt und wie Sie es sinnvoll in Geschäftsprozesse einbinden.

Was genau ist das Datumsfeld in Odoo?


Im Odoo-ORM ist das Datumsfeld (fields.Date) dafür gedacht, rein das Kalenderdatum zu speichern – also Jahr, Monat und Tag, ohne Stunden oder Minuten. Ein Eintrag wie "2026-03-06" enthält keinerlei Uhrzeitinformationen.

Auf Datenbankebene wird das Datumsfeld in PostgreSQL als DATE-Spalte abgelegt, wohingegen DateTime als TIMESTAMP gespeichert wird und damit Zeitangaben bis auf Sekundenebene unterstützt.

In der Benutzeroberfläche zeigt sich das Datumsfeld als Eingabefeld mit einem Kalender-Picker: Anwender können tippen oder ein Datum auswählen. In Listen wird das Datum formatiert nach den Spracheinstellungen des Benutzers dargestellt.

So sieht eine typische Definition eines Datumsfelds in einem Modul aus:

from odoo import fields, models

class ProjectTask(models.Model):
    _inherit = 'project.task'

    x_deadline_confirmed = fields.Date(
        string='Confirmed Deadline',
        help='The officially confirmed deadline agreed with the customer.',
    )

In Odoo Studio heißt das Element einfach "Date". Felder, die per Studio angelegt werden, bekommen automatisch das Präfix x_studio_. Legen Sie das Feld hingegen per Python-Code oder über die API an, vergeben Sie selbst einen technischen Namen.

Wie das Feld technisch funktioniert


Date vs. DateTime – worin liegt der Unterschied?

Das Entscheidende beim Datumsfeld ist, was fehlt: jede Uhrzeit. Es gibt keine Stunden, keine Konvertierungen, nur das reine Kalenderdatum.

DateTime hingegen speichert einen kompletten Zeitstempel in UTC und wird beim Anzeigen in die lokale Zeitzone des Benutzers umgerechnet. Genau hier entstehen oft die berühmten "mein Datum ist um einen Tag verschoben"-Probleme – das ist ein DateTime-Phänomen, nicht das Datumsfeld.

Bei einem Date-Feld entspricht der gespeicherte Wert exakt dem, was alle Nutzer sehen. Ein Eintrag 2026-03-15 ist für jeden Anwender 2026-03-15, egal in welcher Zeitzone er arbeitet.

Wichtige Attributen des Feldes

Die folgenden Optionen sind die wichtigsten Konfigurationsmöglichkeiten für ein Datumsfeld in Odoo:

  • required: macht das Feld verpflichtend in UI und Modell.
  • default: legt einen automatischen Standardwert fest; z. B. fields.Date.today für das aktuelle Datum.
  • index: erzeugt einen Datenbankindex, sinnvoll für Filter und Berichte.
  • compute: verbindet das Feld mit einer Python-Funktion, die den Wert berechnet.
  • store: zusammen mit compute sorgt store=True dafür, dass das berechnete Ergebnis in der DB gespeichert wird.
  • readonly: verhindert die direkte Bearbeitung im Formular.
  • copy: steuert, ob der Wert beim Duplizieren übernommen wird (Standard: True).

Darstellung in Ansichten

Im Formular öffnet sich ein Kalender-Picker, in Listen wird das Datum formatiert angezeigt. Die Suchansicht bietet vordefinierte Bereiche wie "diese Woche", "diesen Monat" oder Vergleichsoperatoren wie vor/nach/ein Datum.

Das Anzeigeformat folgt den Spracheinstellungen des Benutzers (z. B. DD/MM/YYYY in Europa). Intern liegt das Datum aber immer im ISO-Format (YYYY-MM-DD) vor.

Wie das ORM mit Date-Feldern umgeht

Beim Lesen liefert das Odoo-ORM ein Python datetime.date-Objekt oder False, wenn leer. Beim Schreiben akzeptiert das ORM entweder ein datetime.date-Objekt oder einen String im Format "YYYY-MM-DD". Bei XML-RPC werden Datumswerte üblicherweise als Strings übertragen.

Es gibt keine komplizierten Umwandlungen: Odoo kümmert sich um Speicherung und Darstellung, weshalb Date-Felder im Alltag sehr zuverlässig sind.

Praxisbeispiele aus Unternehmen


Wo Datumsfelder typischerweise eingesetzt werden – fünf konkrete Beispiele

CRM: Vertragsbeginn und -ende

Im Vertrieb sind Verträge oft zeitlich begrenzt. Ein Datumsfeld auf Leads oder Vertragsmodellen dokumentiert Start- und Endtermine und macht Laufzeiten transparent.

Kombiniert mit automatischen Aktionen lassen sich Erinnerungen oder Statuswechsel auslösen, wenn ein Vertrag dem Ende entgegengeht – so entgehen Ihnen weniger verpasste Verlängerungen.

Vertrieb: vom Kunden gewünschte Liefertermine

Kunden geben häufig ein konkretes Lieferdatum an. Ein "vom Kunden gewünschtes Datum" auf Verkaufsbestellungen gibt der Operative-Abteilung eine klare Planungsbasis.

Ein Datumsfeld statt DateTime sorgt hier für Klarheit: keine Zeitzonenkonversionen, keine Missverständnisse zwischen Vertrieb und Lager.

Lager: Verfallsdaten für Chargen

In Branchen wie Lebensmittel oder Pharma sind Verfalls- und Mindesthaltbarkeitsdaten wichtig. Odoo speichert solche Daten auf stock.lot mit Date-Feldern.

Diese Daten steuern FEFO-Strategien und automatische Warnungen bei nahendem Ablauf – wichtig für Reklamationsschutz und Compliance.

Buchhaltung: Fälligkeitsdaten von Rechnungen

Fälligkeiten sind Datumsfelder und bestimmen Mahnläufe, die Identifikation überfälliger Rechnungen und die Erstellung der Altersanalysen (Aging).

Ein falsch gesetztes Fälligkeitsdatum kann Zahlungsläufe und Liquiditätsplanung stören – deshalb ist hier die richtige Feldwahl besonders kritisch.

HR: Einstellungen, Vertrags- und Zertifizierungsdaten

Für HR sind Einstellungsdaten, Ende der Probezeit, Vertragslaufzeiten und Zertifikat-Ablaufdaten typische Date-Felder. Sie treiben Erinnerungen, E-Mail-Benachrichtigungen und Lohnberechnungen an.

Eine saubere Personalverwaltung in Odoo basiert auf verlässlichen Datumsangaben in Mitarbeiterakten – diese Felder sind oft Auslöser für geschäftskritische Automatisierungen.

Datumsfelder anlegen oder anpassen


Es gibt drei gängige Wege, ein Datumsfeld in Odoo hinzuzufügen, je nach technischem Setup und Governance-Anforderungen.

Per Odoo Studio (No-Code)

Studio bietet den schnellsten Weg, ohne Code ein Datumsfeld zu ergänzen. Ideal für Consultants und Fachanwender, die Standardformulare erweitern wollen:

  1. Odoo Studio im Hauptmenü öffnen.
  2. Zum gewünschten Formular navigieren.
  3. Ein Datumsfeld aus der Seitenleiste in das Formular ziehen.
  4. Beschriftung, Pflichtfeld-Status und optionalen Standardwert festlegen.
  5. Studio speichern und schließen.

Studio legt das Feld mit dem Präfix x_studio_ an und fügt es sofort der Ansicht hinzu – es ist keine manuelle Datenbankmigration nötig.

Per Python in einem Custom-Modul

Für Entwickler und projektreife Anpassungen erfolgt die Definition in Python-Modellen. Diese Methode ist Versionierbar und für produktive Deployments empfohlen:

from odoo import fields, models

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

    x_customer_requested_date = fields.Date(
        string='Customer Requested Date',
        index=True,
        copy=False,
        help='Delivery date requested by the customer at time of order.',
    )

Nach dem Ergänzen im Modell müssen Sie das Feld zusätzlich in der passenden View-XML aufnehmen. Beim Installieren oder Aktualisieren des Moduls erstellt Odoo automatisch die dazugehörige Datenbankspalte.

Per XML-RPC API

Für automatisierte Setups oder Remote-Konfigurationen können Felder auch programmatisch über XML-RPC erzeugt werden:

field_id = models.execute_kw(
    ODOO_DB, uid, ODOO_API_KEY,
    'ir.model.fields', 'create',
    [{
        'name': 'x_customer_requested_date',
        'field_description': 'Customer Requested Date',
        'model_id': model_id,
        'ttype': 'date',
        'state': 'manual',
    }]
)

Wichtig: für Datumsfelder lautet ttype 'date' (bei Zeitstempeln 'datetime'). Der Zustand 'manual' signalisiert, dass das Feld nicht per Modul installiert wurde, sondern manuell angelegt wurde.

Empfehlungen für den täglichen Einsatz


1. Date statt DateTime wählen, wenn die Uhrzeit keine Rolle spielt

Wenn nur das Datum zählt – Fristen, Geburtstag, Ablaufdatum – dann nutzen Sie fields.Date. DateTime bringt unnötige Zeitzonenkomplexität und kann zu Off-by-one-Fehlern führen.

2. Sinnvolle Default-Werte setzen

Für Felder wie "erwartetes Lieferdatum" lohnt es, einen Standard auf heute oder heute+X Tage zu setzen. Verwenden Sie default=fields.Date.today (ohne Klammern), damit der Default bei jeder Neuerstellung aktuell berechnet wird.

3. Indexieren, wenn das Feld oft gefiltert wird

Wenn Anwender regelmäßig nach einem Datum filtern (überfällige Rechnungen, kommende Verlängerungen), aktivieren Sie index=True. Auf großen Tabellen verbessert ein Index Abfragezeiten deutlich und kostet wenig bei der Anlage.

4. copy=False für Felder, die beim Duplizieren nicht übernommen werden sollen

Start- oder Ablaufdaten sollten beim Duplizieren nicht automatisch übernommen werden. Setzen Sie copy=False, damit die Anwender das Datum bewusst neu setzen und veraltete Daten nicht unbemerkt weitergetragen werden.

5. Constraints bei Datumsbereichen einbauen

Bei Paaren wie "Startdatum" und "Enddatum" ist ein Python-Constraint (@api.constrains) Pflicht, um sicherzustellen, dass das Enddatum nicht vor dem Start liegt. Das verhindert später schwer zu findende Inkonsistenzen.

Häufige Fehlerquellen


Verwechslung von Date und DateTime

Die häufigste Fehlerquelle: DateTime statt Date verwenden. DateTime wird in UTC gespeichert und bei der Anzeige angepasst; Date speichert nur das Kalenderdatum. Wer DateTime wählt, obwohl nur das Datum relevant ist, riskiert Darstellungsverschiebungen zwischen Zeitzonen.

Nutzen Sie immer die einfachste passende Feldart.

Server-Zeitzone bei geplanten Aktionen nicht berücksichtigen

Achten Sie bei geplanten Aktionen oder Berichten, die relative Filter wie "heute" nutzen, auf die Server-Zeit. fields.Date.today() gibt das Server-Datum (UTC) zurück. Bei verteilten Teams kann das zu ein-tägigen Abweichungen führen – testen Sie Automatisierungen aus mehreren Zeitzonen.

Fehlende Validierung bei Datumsbereichen

Häufig fehlen Prüfungen, die verhindern, dass ein Enddatum vor dem Startdatum liegt. Solche Inkonsistenzen brechen Dauerberechnungen und Filter. Setzen Sie daher immer eine entsprechende Constraint-Logik ein.

Index vergessen für häufig gefilterte Datumsfelder

Datumsfelder, die in Abfragen wie "Datum < heute" auftauchen, sollten indiziert sein. Ohne Index wird die Datenbank oft zu einer Full-Table-Scan gezwungen, was bei großen Modellen die Performance merklich verschlechtert.

Daten als Char-Feld speichern

Manche Teams speichern Daten als Text, um ein bestimmtes Format zu behalten. Das zerstört Sortierung, Filter und Datumsarithmetik. Verwenden Sie immer fields.Date – Odoo und PostgreSQL übernehmen Formatierung und Lokalisierung.

FAQ


Worin besteht der Unterschied zwischen Date und DateTime in Odoo?

Ein Date-Feld speichert nur das Kalenderdatum (Jahr/Monat/Tag). Ein DateTime-Feld speichert zusätzlich Stunden/Minuten/Sekunden, wird in UTC abgelegt und bei Anzeige in die lokale Zeitzone des Benutzers umgerechnet. Verwenden Sie Date, wenn die Tagesgenauigkeit ausreicht; nutzen Sie DateTime, wenn der genaue Zeitpunkt relevant ist.

Wie setze ich Standard auf das heutige Datum?

In Python verwenden Sie default=fields.Date.today ohne Klammern, damit Odoo das Datum bei jeder Neuerstellung neu bestimmt. In Odoo Studio wählen Sie in den Feldeigenschaften "Today" als Default aus.

Kann ein Datumsfeld berechnet werden?

Ja. Definieren Sie compute='_compute_my_date' und implementieren Sie eine Methode mit @api.depends(...) für die auslösenden Felder. Für Datumsberechnungen verwenden Sie Python datetime.date und timedelta. Mit store=True wird das Ergebnis in der DB abgelegt und ist damit filter- und gruppierbar.

Wie filtere ich Datensätze nach einem Datumsbereich in einer Domain?

Verwenden Sie Vergleichsoperatoren in der Domain. Beispiel: alle Einträge im März 2026 finden Sie mit:

[
    ('x_date_field', '>=', '2026-03-01'),
    ('x_date_field', '<=', '2026-03-31')
]

Datumangaben in Domains sollten immer im ISO-Format YYYY-MM-DD stehen.

Kann ein Datumsfeld nur unter bestimmten Bedingungen verpflichtend sein?

Rein visuell lässt sich das per attrs in der View regeln; echte Backend-Validierung benötigt Python-Logik, etwa ein @api.constrains. Für einfache Fälle bieten Odoo Studio und View-Attribute jedoch eine praktische No-Code-Alternative.

Fazit


Zusammengefasst: Das Datumsfeld ist eines der praktischsten Feldtypen in Odoo. Es ist leicht zu verstehen, zuverlässig in der Nutzung und treibt wichtige Geschäftslogiken wie Erinnerungen, Überfälligkeiten und zeitbasierte Berichte.

Wesentliche Erkenntnisse: Verwenden Sie Date statt DateTime, wenn nur das Datum relevant ist; setzen Sie sinnvolle Defaults und Indizes für Performance; und fügen Sie Constraints ein, wenn zwei Felder eine Datumsrange bilden.

Gute Datenmodelle in Odoo entstehen durch viele kleine, richtige Entscheidungen – und die Auswahl des passenden Feldtyps gehört ganz oben auf die Liste. Ein korrekt eingesetztes Datumsfeld ist ein kleiner, aber zentraler Baustein einer stabilen Odoo-Implementierung.

Bei Dasolo unterstützen wir Unternehmen dabei, Odoo in allen Abteilungen optimal einzusetzen: vom sauberen Datenmodell über individuelle Felder und Workflows bis hin zur vollständigen Modulentwicklung. Kontaktieren Sie uns und lassen Sie uns über Ihr Odoo-Projekt sprechen.

Odoo Date Field: Alles, was Sie wissen müssen
Dasolo 6. März 2026
Diesen Beitrag teilen
Anmelden , um einen Kommentar zu hinterlassen