Hoppa till innehåll

Datetime Field i Odoo — Komplett Guide för Datum och Tid

Allt du behöver veta om datetime-fältet i Odoos datamodell — från hur tidpunkter sparas till tidszoner och praktiska användningsområden för företag
6 mars 2026 av
Datetime Field i Odoo — Komplett Guide för Datum och Tid
Dasolo
| Inga kommentarer ännu

Inledning


Datum och tidpunkter är kärnan i nästan alla affärsflöden — från när en order lades till när en leverans beräknas ske eller när en anställd stämplade in. I Odoo hanteras denna typ av information främst med ett Datetime-fält som fångar både datum och exakt tidpunkt för händelser.


Till skillnad från ett rent datumfält som bara berättar vilken dag något skedde, sparar ett Datetime-fält också klockslaget. Det blir särskilt viktigt när systemet används över flera tidszoner eller när beslut och rapporter kräver precision ner på timme och minut.


Denna guide ger en helhetsbild av Datetime i Odoo: vad som lagras, hur det representeras i datamodellen, hur du lägger till och konfigurerar fältet både utan kod och med kod, samt praktiska exempel från verkliga affärsprocesser.

Vad är fältet Datetime i Odoo?


I Odoos ORM används fields.Datetime för att lagra ett kombinerat datum- och tidsvärde med sekundprecision. I databasen motsvaras det av en TIMESTAMP-kolumn i PostgreSQL. Internt sparas alltid värden i UTC — Odoo konverterar till användarens lokala tidszon när värdet visas i gränssnittet.


För användaren visas Datetime som en kombinerad datum- och tidsväljare i formulär: kalender för datumet och ett fält för tiden. I listor och rapporter formateras värdet enligt användarens språk- och tidszonsinställningar så att presentationen blir lokal och lättläst.


Så här kan ett Datetime-fält se ut när du definierar det i en Python-modell:

from odoo import fields, models

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

    x_confirmed_on = fields.Datetime(
        string='Confirmed On',
        default=fields.Datetime.now,
        readonly=True,
        copy=False,
    )

Parametern string bestämmer etiketten som syns för användaren. default kan fylla i aktuell tid automatiskt vid skapande. readonly gör fältet oföränderligt i gränssnittet — vanligt för auditoriska tidsstämplar som inte ska redigeras manuellt.


I Odoo Studio heter fälttypen "Date & Time". Fält som skapas via Studio får automatiskt prefixet x_studio_. Skapar du fält i kod eller via API bestämmer du själv det tekniska namnet.

Hur fältet fungerar


När ett Datetime-fält definieras i en modul skapar Odoo automatiskt motsvarande databaskolumn vid installation eller uppgradering av modulen. Du behöver normalt inte skriva några egna SQL-migrationer för detta.


Många blir förvånade över hur Odoo hanterar tidszoner: alla värden sparas i databasen i UTC. Om en användare i Paris anger ett möte klockan 15:00, sparas det som 13:00 UTC. En användare i New York ser samma post som 09:00 i sitt gränssnitt. Den här konverteringen sköts automatiskt av Odoo baserat på varje användares inställda tidszon.


Viktiga fältegenskaper

Följande egenskaper är de mest relevanta när du arbetar med Datetime i Odoo:

  • default: Vanligtvis satt till fields.Datetime.now för att automatiskt fylla i aktuell UTC-tid vid ny post.
  • required: Gör fältet obligatoriskt i formulär och på modellnivå.
  • readonly: Förhindrar manuell redigering i gränssnittet — lämpligt för automatiskt genererade tidsstämplar.
  • compute: Kopplar fältet till en Python-metod som beräknar värdet utifrån andra fält eller affärslogik.
  • store: I kombination med compute låter den här egenskapen spara det beräknade värdet i databasen så att det kan användas i sökningar och rapporter.
  • copy: Styr om värdet ska kopieras vid duplicering av en post. Standard är True — sätt False för tidsstämplar som inte ska följas med till kopior.
  • index: Skapar index i databasen. Viktigt för fält som ofta används i filter, exempelvis schemalagda datum på stora tabeller.

Hur fältet syns i vyer

I formulär öppnar Datetime upp en datumkalender och en tidväljare i samma fält. I listvyer visas värdet som en formaterad text enligt användarens språk. I sökfält stödjer Datetime intervallfilter som före, efter och mellan, vilket är praktiskt för tidsbaserade analyser.


Du kan också använda widgeten date_range för att visa ett val av tidsintervall direkt i formulär, vilket underlättar planering av tidsfönster och uppgifter med start- och sluttider.


När ska du välja Datetime kontra Date

En enkel tumregel: använd Date när endast kalenderdatumet spelar roll, och Datetime när tid på dagen är relevant för affärsprocessen eller rapporteringen.

Använd Date för exempelvis fakturaförfallodatum, födelsedagar, produktens sista förbrukningsdag eller avtalsförnyelsedatum.


Använd Datetime för exempelvis orderbekräftelsetidpunkter, mötesstart, anställdas in- och utstämpling eller planerade lagertransporter.

Att använda Datetime i onödan skapar bara extra tidszonskomplexitet utan praktisk nytta. Fråga alltid om klockslaget faktiskt påverkar processen innan du väljer Datetime.

Affärsscenarier där Datetime behövs


Var Datetime används i vanliga Odoo-moduler


CRM: uppföljning av aktiviteter

I CRM finns flera Datetime-fält som hjälper säljteam att förstå tempo och status: när en lead öppnades, när en uppföljning ska göras och liknande. Sådana tidsstämpeln används för att mäta svarstider, hitta försenade aktiviteter och rapportera teamets insats. Anpassade Datetime-fält kan också logga när offert skickades eller när ett viktigt samtal ägde rum.


Försäljning: orderbekräftelser

I sales.order fångar date_order exakta tidpunkten för bekräftad försäljning. Det är viktigt för att analysera försäljning per timme eller dag, mäta behandlingstider och revidera händelser efter bekräftelse. Filter och rapporter baserade på detta fält är vanliga i försäljningsanalyser.


Lager: planerade plock- och leveransdatum

I stock.picking används scheduled_date för att planera när gods ska hämtas eller levereras. Systemet kan trigga aviseringar och arbetsflöden baserat på om ett schema är försenat, vilket möjliggör proaktiv kommunikation med kunderna innan de hör av sig.


Produktion: start- och sluttider

Produktionsordrar sparar när produktion startade och avslutades med Datetime-fält. Denna information används i kapacitetsplanering och effektivitetsrapporter. För företag med skift är korrekt tidsangivelse avgörande för att förstå avvikelse mellan planerad och faktisk produktion och för att upptäcka flaskhalsar per tid på dygnet eller per operatör.


HR: närvaro och ledighet

HR-moduler använder Datetime för in- och utstämpling samt för exakta start- och slut-tidpunkter för ledighet. Lönekörning, övertidsberäkning och frånvarorapporter kräver ofta minutprecision — felaktiga eller saknade tidsstämplar kan ge direkta ekonomiska konsekvenser.

Skapa eller anpassa Datetime-fältet


Tre sätt att lägga till ett Datetime-fält


Beroende på roll och behov finns både no-code och kodbaserade alternativ för att skapa fält: via Odoo Studio, i en anpassad Python-modul eller genom API/skript.

Via Odoo Studio (utan kod)

  1. Öppna Odoo Studio från huvudmenyn.
  2. Navigera till det formulär där du vill lägga till fältet.
  3. Dra in ett Date & Time-fält från sidopanelen till formuläret.
  4. Sätt etikett, obligatorisk-status och eventuellt standardvärde i fältets egenskaper.
  5. Spara och stäng Studio.

Studio skapar fältet automatiskt med prefixet x_studio_ och uppdaterar vyn. Inga manuella databasändringar krävs, vilket gör detta till ett smidigt alternativ för användare utan utvecklarkunskaper som snabbt behöver lägga till tidsstämplar i formulär.


Via Python i en anpassad modul

För utvecklare som vill versionshantera och deploya anpassningar definieras fältet i modellfiler. Det är bästa praxis för ändringar som ska underhållas över miljöer:


from odoo import fields, models

class ResPartner(models.Model):
    _inherit = 'res.partner'

    x_last_contact_date = fields.Datetime(
        string='Last Contact Date',
        default=fields.Datetime.now,
        copy=False,
    )

Efter att fältet lagts till i modellen måste du även lägga in det i relevant vy-XML så att det syns i gränssnittet. Odoo skapar TIMESTAMP-kolumnen automatiskt vid installation eller uppgradering av modulen — ingen manuell SQL krävs.


Via XML-RPC API

När du behöver automatisera fältskapande som del av utrullningsskript eller fjärrkonfiguration kan du använda XML-RPC för att skapa Datetime-fält programatiskt.


field_id = models.execute_kw(
    ODOO_DB, uid, ODOO_API_KEY,
    'ir.model.fields', 'create',
    [{
        'name': 'x_last_contact_date',
        'field_description': 'Last Contact Date',
        'model_id': model_id,
        'ttype': 'datetime',
        'state': 'manual',
    }]
)

ttype: 'datetime' instruerar Odoo att skapa ett Datetime-fält. state: 'manual' indikerar att fältet skapats utanför en modulinstallation — korrekt för Studio- eller API-skapade fält. Denna metod används ofta vid automatiserade kundkonfigurationer.

Bra praxis


1. Använd fields.Datetime.now utan parenteser

När du sätter default ska du skriva default=fields.Datetime.now — utan (). Om du skriver fields.Datetime.now() evalueras funktionen en gång när modulen laddas och alla nya poster får samma fastfrusna tidpunkt, vilket är en tyst felkälla.


2. Sätt copy=False för händelsetidsstämplar

Tidsstämplar som representerar att något verkligen hände (t.ex. bekräftelsetid) bör ha copy=False. Vid duplicering av poster vill du inte återanvända originalets tidpunkter, annars förorenas historiken.


3. Skicka alltid UTC vid skrivningar via API

När du skapar eller uppdaterar via XML-RPC/REST, skicka Datetime i UTC och i formatet YYYY-MM-DD HH:MM:SS. API:n gör ingen tidszonskonvertering vid skrivning; om du skickar lokal tid kommer värdet att behandlas som UTC och ge felaktiga tidpunkter i systemet.


4. Använd readonly för automatiskt genererade tidsstämplar

Auto-genererade tidpunkter bör vara readonly i gränssnittet så att användare inte oavsiktligt ändrar historiska händelser. Om ändring är nödvändig, kontrollera åtkomsten via rättighetsinställningar istället för att lämna fältet öppet att redigera.


5. Välj Date om tid inte behövs

Om bara datumet spelar roll — t.ex. för förfallodagar eller förnyelsedatum — välj fields.Date. Datetime tillför onödig komplexitet i form av tidszonshantering utan att ge mervärde.

Vanliga fallgropar


Tidzoner och råa databasutläsningar — vanligt missförstånd

Ett av de vanligaste problemen är att utvecklare läser UTC-värden direkt från databasen eller API:et och tror att de ser användarens lokala tid. Resultatet blir rapporter och integrationer som visar tidpunkter flera timmar fel. All presentation för slutanvändaren måste därför konverteras till rätt tidszon i klientledet.


Skriva lokal tid via API — fallgrop

Om du skickar ett lokalt klockslag till API:t utan att konvertera till UTC, kommer systemet att lagra det som om det redan var UTC. Det leder till att användare i samma tidszon får fel visning, särskilt vid sommar-/vintertidsskiften — en bugg som ofta dyker upp först i produktion.


Att använda fields.Datetime.now() med parenteser — tyst fel

Om du sätter default=fields.Datetime.now() evalueras tiden vid modulinläsning och alla efterföljande poster får samma tidsstämpel. Det ser kanske OK ut till en början men förstör analyser som bygger på skapandetidpunkter eftersom alla rader får identisk tid.


Glömma copy=False vid kopiering

Utanför att missa copy=False leder duplicerade poster till att historik kopieras rakt av — bekräftelsedatum, starttider och andra tidsstämplar följer med. Det gör rapporter opålitliga och skadar audit-trace: en liten inställning med stor påverkan på datakvaliteten.


Använda Datetime när Date räcker

Att välja Datetime för fält som bara behöver ett datum gör gränssnittet onödigt komplext och inför tidszonskonverteringar där de inte behövs. Håll modellen så enkel som möjligt — välj den fälttyp som bäst speglar affärsbehoven.

Sammanfattning


Sammanfattningsvis är Datetime ett kraftfullt fälttyp i Odoo när du behöver tidpunktens precision. Den återfinns i CRM, försäljning, lager, produktion och HR — överallt där exakt tid spelar roll.


Det viktigaste att förstå är Odoos UTC-modell: allt sparas i UTC och presenteras i användarens tidszon. De flesta tidszonsbuggar i integrationer kommer tillbaka till missförstånd kring detta. Vid externa läsningar och skrivningar måste du hantera konverteringen uttryckligen.


I övrigt: använd rätt default-syntax (utan parenteser), sätt copy=False när det behövs och välj Date när tid inte är relevant — så håller du datamodellen ren och rapporterna pålitliga.

Om ni behöver hjälp med att utforma datamodeller, lägga in skräddarsydda fält eller bygga moduler från grunden kan vårt team på Dasolo hjälpa till att implementera och optimera ert Odoo-landskap. Kontakta oss gärna så diskuterar vi ditt Odoo-projekt och hur vi kan stötta ert arbete.

Datetime Field i Odoo — Komplett Guide för Datum och Tid
Dasolo 6 mars 2026
Dela detta inlägg
Logga in att lämna en kommentar