Przejdź do zawartości

Pole Date w Odoo — Kompletny przewodnik po polu daty

Kompletny przewodnik po polu Date w modelu danych Odoo — od zastosowań praktycznych po zaawansowane modyfikacje techniczne
6 marca 2026 przez
Pole Date w Odoo — Kompletny przewodnik po polu daty
Dasolo
| Brak komentarzy na ten moment

Wprowadzenie


Jeśli kiedykolwiek otwierałeś zamówienie sprzedaży, zadanie projektowe lub zlecenie produkcyjne w Odoo, korzystałeś już z pola Data. Terminy, daty dostaw, terminy płatności faktur czy daty rozpoczęcia umów — większość informacji zależnych od daty w Odoo przechowywana jest właśnie w tym typie pola.

Dla użytkownika biznesowego pole Data jest proste: klikasz, pojawia się kalendarz, wybierasz datę. Jednak pod powierzchnią dzieje się więcej. Znajomość modelu danych Odoo, różnic między polem Data a DateTime oraz sposobu tworzenia i modyfikowania tego pola pozwala zapobiegać niespodziankom związanym ze strefami czasowymi i budować bardziej niezawodne procesy.

Ten przewodnik wyjaśnia wszystko, co warto wiedzieć o polu Data w Odoo — co jest w nim zapisywane, jak wygląda w interfejsie i jak wykorzystać je efektywnie w codziennej pracy.

Czym jest pole Data w Odoo


W ORM Odoo pole fields.Date przechowuje wyłącznie datę kalendarzową — rok, miesiąc i dzień. Nie ma w nim godzin, minut ani sekund; wartość taka jak "2026-03-06" pozostaje dokładnie taką datą.

W bazie danych PostgreSQL pole Data mapowane jest na typ kolumny DATE. To różni się od pola DateTime, które korzysta z TIMESTAMP i przechowuje pełny znacznik czasowy z sekundami.

W interfejsie pole Data wyświetla się jako pole tekstowe z pickerem kalendarza — użytkownik może wpisywać datę ręcznie lub wybrać ją myszką. W widokach listy daty są formatowane zgodnie z ustawieniami lokalnymi użytkownika.

Przykład definicji pola Data w module Python:

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.',
    )

W Odoo Studio pole to nazywa się po prostu Date. Studio automatycznie dodaje prefiks x_studio_ przy tworzeniu. Jeśli pole definiujesz w kodzie Python lub przez API, sam wybierasz jego techniczną nazwę.

Jak działa to pole


Data kontra DateTime — co się zmienia

Najważniejsze do zapamiętania: pole Data nie zawiera informacji o czasie. Nie ma godzin, nie ma konwersji stref czasowych — przechowywana jest tylko sama data.

Pole DateTime natomiast zapisuje pełny znacznik czasowy w UTC i Odoo konwertuje go na strefę czasową użytkownika przy wyświetlaniu. To źródło wielu zagadkowych błędów typu „moja data przesunęła się o dzień”. Zwykle takie problemy wynikają z użycia DateTime tam, gdzie wystarczyła Data.

Przy użyciu pola Data to, co zapiszesz, jest dokładnie tym, co zobaczą wszyscy użytkownicy — np. 2026-03-15 będzie 2026-03-15 niezależnie od miejsca na świecie.

Kluczowe atrybuty pola

Poniżej najważniejsze właściwości, które możesz skonfigurować dla pola Data w Odoo:

  • required: wymusza obowiązkowe wypełnienie pola w interfejsie i modelu.
  • default: ustawia wartość domyślną, np. fields.Date.today zwraca dziś przy tworzeniu rekordu.
  • index: tworzy indeks w bazie dla szybszych filtrów i wyszukiwania po tej kolumnie.
  • compute: przypisuje metodę Pythona obliczającą wartość dynamicznie.
  • store: w połączeniu z compute pozwala zapisać wynik w bazie danych.
  • readonly: blokuje edycję pola w interfejsie.
  • copy: definiuje, czy wartość zostanie przeniesiona podczas duplikowania rekordu (domyślnie True).

Jak wygląda pole w widokach

W formularzach pole Data pokazuje calendar picker; w listach jest sformatowanym tekstem; w widoku wyszukiwania obsługuje filtry zakresowe typu "ten tydzień", "ten miesiąc", jak również porównania: przed, po, równo.

Format prezentacji zależy od ustawień językowych użytkownika — np. użytkownik z polskim językiem zobaczy DD/MM/YYYY — ale w bazie wartość zawsze jest zapisana w formacie ISO (YYYY-MM-DD).

Interakcja z ORM Odoo

Przy odczycie pola ORM zwraca obiekt Python datetime.date lub False, jeśli pole jest puste. Przy zapisie można przekazać obiekt datetime.date albo string w formacie "YYYY-MM-DD". Przez XML-RPC daty są przekazywane jako łańcuchy znaków.

Praca z polami Data nie wymaga skomplikowanych transformacji — framework automatycznie zajmuje się formatowaniem i zapisem, co czyni ten typ pola praktycznym i przewidywalnym w programowaniu Odoo.

Zastosowania biznesowe


Pole Data występuje praktycznie w każdym obszarze Odoo. Oto pięć konkretnych przykładów zastosowań z życia firmy.

CRM: daty rozpoczęcia i zakończenia umów

W CRM-ie sprzedażowym umowy mają często określone daty startu i końca. Pole Data na rekordzie leadu lub w modelu umowy ułatwia kontrolę momentu aktywacji i wygaśnięcia kontraktu.

W połączeniu z automatyzacjami można generować przypomnienia mailowe lub zmieniać status, gdy umowa zbliża się do końca — to redukuje liczbę przegapionych odnowień bez ręcznej interwencji zespołu.

Sprzedaż: żądane daty dostawy

Klienci często podają preferowaną datę dostawy przy składaniu zamówienia. Pole typu Data "Żądana data dostawy" na zamówieniach daje operacjom jasny punkt odniesienia do planowania logistyki.

Używanie pola Data zamiast DateTime upraszcza dane i eliminuje problemy ze strefami czasowymi w koordynacji magazynowej — magazyn zobaczy tę samą datę, którą wprowadził dział sprzedaży.

Magazyn: daty ważności partii

W branżach spożywczej, farmaceutycznej czy chemicznej partie produktów muszą mieć kontrolowane daty przydatności. System partii w Odoo wykorzystuje pola Data do zapisu dat ważności na stock.lot.

Na tej podstawie realizowane są strategie FEFO (pierwsze do wygaśnięcia) i generowane alerty o zbliżającym się terminie przydatności, co pomaga w zgodności z przepisami i zachowaniu jakości produktów.

Księgowość: terminy płatności faktur

Terminy płatności faktur w Odoo to pola Data. Od nich zależą wysyłka automatycznych monitów, identyfikacja zaległych należności oraz obliczenia w raportach wiekowania należności i zobowiązań.

Poprawne ustawienie tych dat jest kluczowe — błędny termin płatności może bezszelestnie zniszczyć kontrolę nad przepływami pieniężnymi i działaniem automatycznych przypomnień.

HR: daty zatrudnienia, umów i szkoleń

Działy HR intensywnie korzystają z pól Data: data zatrudnienia, koniec okresu próbnego, daty obowiązywania umów czy ważności certyfikatów. Te daty napędzają automatyczne e-maile, alerty i reguły płacowe.

Moduł HR z dobrą jakością danych zależy od poprawnie wprowadzonych pól Data w kartotekach pracowników — są one często wyzwalaczami krytycznych automatyzacji w firmie.

Tworzenie i dostosowywanie pola Data


Są trzy podstawowe sposoby dodania pola Data do modelu Odoo, zależnie od twojego środowiska i podejścia do wdrożenia.

Użycie Odoo Studio (bez kodu)

Odoo Studio to najprostsza metoda dodania pola Data bez programowania. To rekomendowany sposób dla użytkowników biznesowych i konsultantów, którzy szybko chcą dodać śledzenie dat w standardowych formularzach:

  1. Uruchom Odoo Studio z głównego menu.
  2. Przejdź do formularza, w którym chcesz dodać pole.
  3. Przeciągnij pole Date z paska bocznego na formularz.
  4. Ustaw etykietę, czy pole jest wymagane oraz domyślną wartość, jeśli potrzeba.
  5. Zapisz i zamknij Studio.

Studio tworzy pole z prefiksem x_studio_ i od razu dodaje je do widoku formularza — nie jest potrzebna migracja bazy po twojej stronie.

Użycie Pythona w module niestandardowym

Dla deweloperów tworzących moduły pola Data definiuje się w plikach modeli Pythona. To właściwe podejście, gdy zmiany muszą być wersjonowane i wdrażane w wielu środowiskach:

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.',
    )

Po dodaniu pola do modelu trzeba je jeszcze umieścić w odpowiednim pliku XML widoku, by było widoczne w interfejsie. Odoo automatycznie utworzy kolumnę w bazie przy instalacji lub aktualizacji modułu.

Użycie XML-RPC API

Jeśli zarządzasz konfiguracją zdalnie lub masz pipeline wdrożeniowy, możesz tworzyć pola Data programowo przez API XML-RPC:

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',
    }]
)

Wartość ttype dla pola Data to 'date' (dla DateTime byłoby 'datetime'). Ustawienie state='manual' oznacza, że pole zostało utworzone ręcznie, a nie przez instalację modułu — tak wiele firm zarządza zdalnym tworzeniem pól w skryptach konfiguracyjnych.

Dobre praktyki


1. Używaj Data, nie DateTime, gdy czas nie ma znaczenia

Jeżeli ważna jest tylko data kalendarzowa (terminy, daty umów, data urodzenia, data ważności), stosuj fields.Date. Wybieranie DateTime do danych, gdzie liczy się tylko dzień, wprowadza niepotrzebne komplikacje związane ze strefą czasową i może powodować błędy przesunięcia o jeden dzień.

2. Ustaw sensowną wartość domyślną tam, gdzie to ma sens

Dla pól typu "Oczekiwana data dostawy" czy "Data follow-up" warto domyślnie ustawić dzisiejszą datę lub dzisiaj + N dni. Używaj default=fields.Date.today bez nawiasów — to callable, które oceni się przy tworzeniu rekordu, a nie na etapie definicji klasy.

3. Indeksuj pola dat używane w raportach i filtrach

Jeżeli użytkownicy często filtrują po dacie (zaległe faktury, nadchodzące odnowienia, wygasające certyfikaty), dodaj index=True. Przy dużych zbiorach danych indeks znacząco przyspieszy zapytania i raporty — mały koszt na starcie, duży zysk na skalę.

4. Używaj copy=False dla dat, które nie powinny być kopiowane

Daty takie jak "Data rozpoczęcia umowy" lub "Data ważności" nie powinny być przenoszone przy duplikowaniu rekordu. copy=False wymusza ponowne ustawienie daty na nowym rekordzie i zapobiega ukrytym błędom.

5. Dodaj walidacje, gdy pola tworzą zakres dat

Gdy masz parę pól "Data rozpoczęcia" i "Data zakończenia", dodaj sprawdzenie w Pythonie przez @api.constrains, aby upewnić się, że koniec nie jest przed początkiem. To proste zabezpieczenie zapobiega wielu problemom z obliczeniami i raportami.

Typowe pułapki


Błędne rozróżnianie Data i DateTime

To najczęstszy błąd przy pracy z wrażliwymi na czas danymi. DateTime zapisuje kompletny znacznik w UTC i konwertuje go przy wyświetlaniu; Data przechowuje jedynie dzień. Użycie DateTime tam, gdzie wystarcza Data, może sprawić, że data wpisana 15 marca w strefie UTC+2 pojawi się jako 14 marca dla użytkownika w UTC-5.

Zawsze wybieraj najprostszy typ pola, który zaspokaja rzeczywistą potrzebę biznesową.

Brak uwzględnienia strefy czasowej serwera w akcjach zaplanowanych

W akcjach planowanych lub raportach filtrujących względem "dzisiaj" pamiętaj, że fields.Date.today() zwraca datę serwera w UTC. Dla większości zastosowań to akceptowalne, ale w rozproszonych zespołach może powodować różnice o jeden dzień. Testuj automatyzację zależną od dat z różnych stref czasowych, jeśli masz globalny zespół.

Brak walidacji zakresów dat

Często spotyka się modele z oddzielnymi polami "Data rozpoczęcia" i "Data zakończenia", bez żadnej walidacji, co pozwala zapisać nieprawidłowe kombinacje. To psuje obliczenia czasu trwania i wyniki filtrów — zawsze dodaj @api.constrains, gdy daty tworzą logiczny zakres.

Zapominanie o indeksach dla pól filtrowanych

Pola Data używane w widokach "zaległe", "nadchodzące termin" czy raportach wiekowych są często filtrowane porównawczo (np. "data < dziś"). Bez indeksu takie zapytania wykonują pełne skanowanie tabeli. Przy dużej liczbie rekordów brak indeksów opóźnia codzienne operacje.

Przechowywanie dat jako Char

Niektóre zespoły zapisują daty jako tekst w polach Char, by zachować własny format lub ominąć picker. To jednak uniemożliwia sortowanie, filtrowanie i operacje datowe. Zawsze używaj fields.Date — framework i baza zajmują się formatowaniem i lokalizacją.

FAQ


Jaka jest różnica między polem Date a DateTime w Odoo?

Pole Date przechowuje tylko datę (rok, miesiąc, dzień). Pole DateTime zapisuje pełny znacznik czasowy (godziny, minuty, sekundy) w UTC i przy wyświetlaniu konwertuje go do lokalnej strefy użytkownika. Użyj Date, gdy pora dnia nie ma znaczenia; użyj DateTime, gdy trzeba wiedzieć dokładnie, kiedy coś się wydarzyło.

Jak ustawić dzisiejszą datę jako domyślną dla pola Date?

W Pythonie użyj default=fields.Date.today bez nawiasów — to callable, które wykona się przy tworzeniu rekordu. W Odoo Studio wybierz "Today" jako domyślną wartość w panelu właściwości pola.

Czy mogę obliczać pole Date na podstawie innych pól?

Tak. Zdefiniuj pole z compute='_compute_my_date' i napisz metodę z dekoratorem @api.depends(), wymieniając pola wywołujące przeliczenie. W obliczeniach używaj datetime.date i timedelta. Dodaj store=True, jeśli chcesz zapisać wynik w bazie do użycia w filtrach, grupowaniach i eksportach.

Jak filtrować rekordy po zakresie dat w domenie Odoo?

Użyj standardowych operatorów porównania w domenie. Aby znaleźć rekordy z datą w marcu 2026, zastosuj:

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

Daty w domenach powinny być zawsze w formacie ISO: YYYY-MM-DD.

Czy mogę uczynić pole Date obowiązkowym tylko w pewnych warunkach?

Standardowe Odoo nie wymusza warunkowości wymagania na poziomie backend bez kodu. W widokach XML możesz użyć attrs, by wizualnie zaznaczyć pole jako wymagane w zależności od innych wartości, ale pełne wymuszenie po stronie serwera wymaga Pythonowego sprawdzenia przez @api.constrains. Dla prostych scenariuszy Odoo Studio oferuje praktyczne reguły widoczności bez pisania kodu.

Podsumowanie


Pole Data to jeden z najpraktyczniejszych typów pól w Odoo. Jest proste do zrozumienia, łatwe w użyciu i wystarczająco mocne, aby napędzać kluczowe logiki biznesowe: przypomnienia, sprawdzanie zaległości i raporty czasowe.

Najważniejsze wnioski: stosuj Date zamiast DateTime, gdy potrzebujesz tylko daty; korzystaj z domyślnych wartości i indeksów, by poprawić wygodę i wydajność; oraz zawsze dodawaj walidacje, gdy pola tworzą zakres.

Budowanie poprawnego modelu danych w Odoo zaczyna się od drobnych decyzji, jak wybór właściwego typu pola. Dobre wybory na wczesnym etapie to fundament solidnej implementacji — pole Data jest jednym z takich elementów.

W Dasolo pomagamy firmom wdrażać, dostosowywać i optymalizować Odoo we wszystkich działach i procesach. Niezależnie czy potrzebujesz pomocy przy zaprojektowaniu przejrzystego modelu danych, dodaniu pól i przepływów pracy, czy stworzeniu modułu od podstaw, nasz zespół służy wsparciem. Skontaktuj się z nami Porozmawiajmy o Twoim projekcie Odoo.

Pole Date w Odoo — Kompletny przewodnik po polu daty
Dasolo 6 marca 2026
Udostępnij ten artykuł
Zaloguj się by zostawić komentarz