Skip to Content

Datofelt i Odoo: Den Ultimative Guiden

Alt du trenger å vite om Datofeltet i Odoo datamodellen, fra grunnleggende bruk til teknisk tilpasning
6. mars 2026 etter
Datofelt i Odoo: Den Ultimative Guiden
Dasolo
| No comments yet

Introduksjon


Hvis du noen gang har åpnet en salgsordre, en prosjektoppgave eller en produksjonsordre i Odoo, har du allerede brukt et datofelt. Frister, leveringsdatoer, forfallsdatoer for fakturaer, kontraktsstartdatoer - mesteparten av den tidsfølsomme informasjonen i Odoo lagres ved hjelp av denne felt typen.

For forretningsbrukere er datofeltene intuitive: du klikker, en kalender vises, du velger en dato. Men det skjer mer under overflaten. Å forstå hvordan datofeltet fungerer i Odoo-datamodellen, hvordan det skiller seg fra DateTime-feltene, og hvordan du kan opprette eller tilpasse det, vil hjelpe deg med å bygge mer nøyaktige arbeidsflyter og unngå de tidssoneoverraskelsene som forvirrer mange Odoo-implementeringer.

Denne guiden dekker alt du trenger å vite om datofeltet i Odoo, fra hva det lagrer til hvordan du bruker det effektivt i forretningsprosessene dine.

Hva er datofeltet i Odoo


I Odoo ORM er fields.Date-typen designet for å lagre kalenderdatoer uten tidskomponent. En dato som "2026-03-06" lagres akkurat som den er, uten timer, minutter eller sekunder knyttet til.

I PostgreSQL, databasen Odoo kjører på, kartlegges et datofelt til DATE-kolonnetypen. Dette er forskjellig fra DateTime-feltet, som kartlegges til TIMESTAMP og inkluderer et fullstendig tidsstempel ned til sekundet.

I brukergrensesnittet vises et datofelt som et tekstfelt med en kalendervelger. Brukere kan enten skrive inn en dato direkte eller klikke på kalenderikonet for å velge en. I listevisninger vises det som formatert tekst tilpasset brukerens lokale innstillinger.

Slik ser en datofeltdefinisjon ut i et tilpasset Python-modul:

from odoo import fields, models

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

    x_deadline_confirmed = fields.Date(
        string='Bekreftet frist',
        help='Den offisielt bekreftede fristen avtalt med kunden.',
    )

I Odoo Studio er dette feltet enkelt merket Dato. Når det opprettes gjennom Studio, får det automatisk et x_studio_-prefiks. Når det opprettes via Python-kode eller XML-RPC API, velger du det tekniske navnet selv.

Hvordan feltet fungerer


Dato vs. DateTime: hva endres egentlig

Det viktigste å forstå om datofeltet er hva det ikke inkluderer: tid. Det er ingen timer, ingen tidssonekonverteringer, ingenting utover kalenderdatoen selv.

DateTime-feltet lagrer derimot et fullstendig tidsstempel og lagres i UTC i databasen. Odoo konverterer det deretter til brukerens lokale tidssone ved visning. Dette er kilden til mange forvirrende "datoen min skiftet med en dag"-feil som team møter. Disse er nesten alltid DateTime-problemer, ikke datofeltproblemer.

Når du bruker et datofelt, er det du lagrer akkurat det brukerne ser. En verdi på 2026-03-15 er 2026-03-15 for hver bruker, uansett hvor i verden de befinner seg.

Nøkkelfeltattributter

Her er de viktigste egenskapene du kan konfigurere på et Datofelt i Odoo-rammeverket:

  • required: Gjør feltet obligatorisk både på grensesnitt- og modellnivå.
  • default: Setter en automatisk standardverdi. For eksempel, fields.Date.today setter standard til dagens dato på nye poster.
  • index: Oppretter en databaseindeks for raskere filtrering og søk på det feltet.
  • compute: Knytter en Python-metode som beregner verdien dynamisk.
  • store: Når den kombineres med compute, lagrer den den beregnede verdien i databasen.
  • readonly: Forhindrer brukere fra å redigere feltet direkte i grensesnittet.
  • copy: Kontrollerer om verdien overføres når en post dupliseres. Standardverdi er True.

Hvordan det vises i visninger

I skjema-visninger vises et Datofelt som et tekstinnmatingsfelt med en kalender-popup. I listevisninger vises det som formatert tekst. I søkevisninger støtter det datointervallfiltre som standard: "denne uken", "denne måneden", "dette kvartalet", samt eksakte sammenligningsoperatorer som før, etter og på en spesifikk dato.

Visningsformatet følger brukerens språkinnstillinger i Odoo. En amerikansk bruker ser MM/DD/YYYY mens en europeisk bruker ser DD/MM/YYYY. Den underliggende lagrede verdien er alltid i ISO-format (YYYY-MM-DD), uavhengig av hvordan den vises på skjermen.

Interaksjon med Odoo ORM

Når du leser et Datofelt i koden, returnerer Odoo ORM et Python datetime.date objekt, eller False hvis feltet er tomt. Når du skriver gjennom ORM, kan du sende enten et datetime.date objekt eller en streng i "YYYY-MM-DD" format. Gjennom XML-RPC API, blir datoer alltid sendt og mottatt som strenger.

Det er ingen komplekse transformasjoner involvert når man arbeider med Datofelt i Odoo datamodellen. Rammeverket håndterer formatering og lagring automatisk, noe som er en del av det som gjør denne felt typen så praktisk for daglig bruk i Odoo utvikling.

Forretningsbrukstilfeller


Datofeltet vises i nesten alle deler av en Odoo implementering. Her er fem praktiske eksempler fra virkelige forretningsarbeidsflyter.

CRM: Kontrakt Start- og Sluttdatoer

I salgsteam som bruker Odoo CRM, har kontrakter ofte definerte start- og sluttdatoer. Et Datofelt på leaden eller en tilpasset kontraktsmodell gjør det enkelt å spore når avtaler aktiveres og når de utløper.

Kombinert med automatiserte handlinger kan du utløse e-postpåminnelser eller statusendringer når en kontrakt nærmer seg sluttdatoen, uten noen manuell oppfølging fra teamet. Denne typen automatisering er enkel å sette opp og sparer mange glemte fornyelser over tid.

Salg: Ønskede Leveringsdatoer

Kunder ber ofte om en spesifikk leveringsdato når de legger inn bestillinger. Mange selskaper legger til et "Kundeønsket Dato" Datofelt på salgsordrer for å gi driftsteamet en klar mål dato å planlegge rundt.

Ved å bruke et Datofelt i stedet for DateTime holder man dataene enkle og unngår forvirring rundt tidssoner under lagerkoordinering. Lagerteamet ser den samme datoen som salgsteamet la inn, uten risiko for konverteringsproblemer.

Lager: Utløpsdatoer på Partier

I mat-, farmasøytiske og kjemiske industrier, må produktpartier ha utløpsdatoer sporet på lager nivå. Odoos partihåndtering bruker Datofelt for å lagre utløps- og best-før datoer på stock.lot.

Disse driver FEFO (First Expired First Out) plukkestrategier og automatiserte varsler når lageret nærmer seg utløp, og beskytter både regulatorisk overholdelse og produktkvalitet uten å kreve manuelle sjekker.

Regnskap: Faktura Forfallsdatoer

Faktura forfallsdatoer i Odoo er datofelt. De bestemmer når automatiske betalingspåminnelser sendes, hvordan forfalte fakturaer identifiseres, og hvordan rapportene for aldrende fordringer og gjeld beregnes.

Å få disse datoene riktig er en av de mest driftsmessig viktige bruksområdene for datofeltet i hele Odoo datamodellen. En feil forfallsdato bryter stille kontantstrømsporing og oppfølgingsautomatisering.

HR: Ansettelse, Kontrakt og Sertifiseringsdatoer

HR-team er sterkt avhengige av datofelt for ansettelsesdatoer, sluttdatoer for prøvetid, kontraktsstart- og sluttdatoer, og utløpsdatoer for sertifiseringer. Disse verdiene mates inn i automatiserte e-poster, varsler og lønnsberegningsregler.

Et godt utformet HR-modul i Odoo er umulig uten rene, nøyaktige datofeltdata på tvers av ansattregistre. Disse datoene er ofte utløserne for noen av de mest forretningskritiske automatiseringene i en Odoo-oppsett.

Opprette eller Tilpasse Datofeltet


Det er tre hovedmåter å legge til et datofelt i en Odoo-modell, avhengig av din tekniske oppsett og distribusjonsmetode.

Bruke Odoo Studio (Ingen Kode)

Odoo Studio er den enkleste måten å legge til et datofelt uten å skrive noe kode. Dette er den anbefalte tilnærmingen for forretningsbrukere og konsulenter som ønsker å legge til datosporing til standard Odoo-skjemaer raskt:

  1. Åpne Odoo Studio fra hovedmenyen.
  2. Naviger til skjemaet der du vil ha feltet.
  3. Dra et Dato felt fra sidepanelet og inn på skjemaet.
  4. Sett etiketten, obligatorisk status og en standardverdi om nødvendig.
  5. Lagre og lukk Studio.

Studio oppretter feltet med et x_studio_ prefiks og legger det til skjemaet umiddelbart. Ingen databasemigrasjon er nødvendig fra din side.

Bruke Python i et Tilpasset Modul

For utviklere som bygger Odoo-moduler, defineres datofelt i Python-modellfiler. Dette er den riktige tilnærmingen for enhver tilpasning som må versjonskontrolleres og distribueres på tvers av flere miljøer:

from odoo import fields, models

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

    x_customer_requested_date = fields.Date(
        string='Kundeønsket dato',
        index=True,
        copy=False,
        help='Leveringsdato ønsket av kunden ved bestilling.',
    )

Etter å ha lagt til feltet i modellen, må du også legge det til i den relevante visningen XML-filen slik at det vises i grensesnittet. Odoo håndterer opprettelsen av databasens kolonne når du installerer eller oppgraderer modulen.

Bruke XML-RPC API

For programmatisk opprettelse av felt som en del av en distribusjonspipeline eller en ekstern konfigurasjonsnotatbok, kan du opprette datofelt via Odoo XML-RPC API:

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

Verdien for ttype for et datofelt er 'date'. For et DateTime-felt ville det vært 'datetime'. Å bruke 'manual' som tilstand forteller Odoo at dette feltet ble opprettet manuelt, ikke ved installasjon av en modul. Slik håndterer Dasolo opprettelse av eksterne felt for kunder som en del av automatiserte konfigurasjonsskript.

Beste praksis


1. Bruk Date, ikke DateTime, når tid er irrelevant

Hvis det eneste som betyr noe er kalenderdatoen (en frist, en kontraktsdato, en fødselsdato, en utløpsdato), bruk fields.Date. Å velge DateTime for rent datobaserte data tilfører kompleksitet med tidssoner uten praktisk nytte, og kan forårsake forvirrende feil med én dag avhengig av serverens tidssoneinnstilling.

2. Sett en meningsfull standard når det gir mening

For felt som "Forventet Leveringsdato" eller "Oppfølgingsdato", gir det mening å bruke i dag eller i dag pluss et antall dager som standard. Bruk default=fields.Date.today uten parenteser for en dynamisk standard som evalueres ved oppretting av posten, ikke ved klassedefinisjon.

3. Indekser dato-felt brukt i rapporter og søkefiltre

Hvis brukerne dine regelmessig filtrerer poster etter et dato-felt (forfalte fakturaer, kommende fornyelser, utløpende sertifikater), legg til index=True. På store datasett forbedrer dette dramatisk ytelsen til filtre og rapporter. Det er en liten endring med betydelig innvirkning i stor skala og koster nesten ingenting å implementere på forhånd.

4. Bruk copy=False for datoer som ikke skal overføres

Datoer som "Kontraktsstartdato" eller "Utløpsdato" bør ikke kopieres når en bruker dupliserer en post. Å legge til copy=False tvinger brukeren til å sette datoen eksplisitt på den nye posten, og unngår stille feil der en utdatert dato vedvarer på en duplisert kontrakt eller prosjektoppgave.

5. Legg til begrensninger når to dato-felt danner et intervall

Når en modell har et "Startdato" og "Sluttdato" par, legg til en Python-begrensning ved å bruke @api.constrains for å sikre at sluttdatoen ikke er før startdatoen. Dette er enkelt å implementere og forhindrer en hel kategori av datakvalitetsproblemer som er irriterende å diagnostisere i etterkant.

Vanlige fallgruver


Forvirrende Date og DateTime-felt

Dette er den mest vanlige feilen når man arbeider med tidsfølsomme data i Odoo. DateTime lagrer et fullstendig tidsstempel i UTC og konverterer ved visning. Date lagrer kun kalenderdatoen uten konvertering. Å bruke DateTime når du bare trenger en dato fører til tidssoneproblemer: en dato som er angitt som 15. mars i et UTC+2-miljø kan vises som 14. mars for en UTC-5-bruker.

Bruk alltid den enkleste felt typen som møter ditt faktiske forretningsbehov.

Ikke ta hensyn til serverens tidssone i planlagte handlinger

Når du bygger planlagte handlinger eller rapporter som filtrerer på et datofelt i forhold til "i dag", vær oppmerksom på at fields.Date.today() returnerer serverdatoen i UTC. For de fleste rapporteringsbrukstilfeller er dette greit, men det kan føre til en-dags avvik for team i tidssoner som avviker betydelig fra serveren. Test datoavhengige automatiseringer fra flere tidssoner hvis teamet ditt er distribuert globalt.

Manglende begrensninger på datointervallpar

Det er vanlig å se implementeringer der "Startdato" og "Sluttdato" eksisterer som separate felt, men ingen validering sikrer at sluttdatoen er etter startdatoen. Dette lar ugyldige data komme inn i systemet stille, noe som bryter varighetsberegninger, filterresultater og rapporter. Legg alltid til en @api.constrains sjekk når to datoer danner et logisk intervall.

Glemmer å indeksere datofelt brukt i filtre

Datofelt brukt i "forsinket" sjekker, "kommende frister" visninger, eller rapporter om eldre saldoer blir vanligvis spurt med sammenligninger som "dato mindre enn i dag". Uten en indeks er hver slik forespørsel en full tabellskanning. På modeller med store posttall som fakturaer, oppgaver eller lagerbevegelser, bremser manglende indekser på datofelt merkbart ned daglige operasjoner over tid.

Lagring av datoer som Char-felt

Noen team lagrer datoer som tekststrenger i Char-felt for å bevare et tilpasset format eller unngå datovelgeren. Dette bryter fullstendig sortering, filtrering, datoarithmetic og rapportering. Bruk alltid den riktige fields.Date typen. Odoo-rammeverket og databasen håndterer formatering og lokalisering automatisk, så det er ingen praktisk grunn til å lagre datoer som ren tekst.

Ofte stilte spørsmål


Hva er forskjellen mellom et datofelt og et datetime-felt i Odoo?

Et datofelt lagrer bare en kalenderdato (år, måned, dag) uten tidskomponent. Et datetime-felt lagrer et fullstendig tidsstempel inkludert timer, minutter og sekunder, lagret i UTC og vist i brukerens lokale tidssone. Bruk dato når tid på dagen er irrelevant for forretningsprosessen. Bruk datetime når du trenger å spore nøyaktig når noe skjedde.

Hvordan setter jeg dagens dato som standard for et datofelt?

I Python, bruk default=fields.Date.today uten parenteser. Dette er en callable som Odoo evaluerer ved oppretting av posten, så standardverdien er alltid den nåværende datoen i stedet for en fast dato som er innebygd ved klasse-definisjon. I Odoo Studio, velg "I dag" som standardverdi i feltets egenskapspanel.

Kan jeg beregne et datofelt basert på verdier fra andre felt?

Ja. Definer feltet med compute='_compute_my_date' og skriv en metode dekorert med @api.depends() som lister opp feltene som utløser rekalkulering. Inne i metoden, utfør datoberegninger ved hjelp av Pythons datetime.date eller timedelta. Legg til store=True hvis du vil at resultatet skal lagres i databasen for bruk i søkefiltre, gruppering og eksport.

Hvordan filtrerer jeg poster etter et datointervall i et Odoo-domene?

Bruk standard sammenligningsoperatører i domenet. For eksempel, for å finne poster der datofeltet faller i mars 2026:

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

Datostrenger i domener bør alltid være i ISO-format: YYYY-MM-DD.

Kan jeg gjøre et datofelt obligatorisk bare under visse betingelser?

Standard Odoo håndhever ikke betingede obligatoriske felt på backend uten kode. Du kan bruke attrs i visnings-XML for å visuelt merke et felt som obligatorisk basert på andre verdier, men ekte håndheving på backend krever en Python-begrensning ved hjelp av @api.constrains. For enkle tilfeller gir Odoo Studios betingede synlighetsregler et praktisk alternativ uten å skrive kode.

Konklusjon


Datofeltet er en av de mest praktiske felttypene i Odoo-rammeverket. Det er enkelt å forstå, greit å bruke, og kraftig nok til å drive viktig forretningslogikk som påminnelser, forfalte sjekker og tidsfølsom rapportering.

De viktigste tingene å ta med seg: bruk Date i stedet for DateTime når du bare trenger en kalenderdato, forstå hvordan standardverdier og indekser forbedrer brukervennlighet og ytelse, og legg alltid til begrensninger når to datofelt definerer et intervall.

Å bygge rene, godt designede datamodeller i Odoo begynner med små beslutninger som å velge riktig felttype. Å få disse riktig fra starten av er et av kjennetegnene ved en solid Odoo-implementering, og datofeltet er en grunnleggende del av det puslespillet.

Hos Dasolo hjelper vi selskaper med å implementere, tilpasse og optimalisere Odoo på tvers av alle avdelinger og forretningsprosesser. Enten du trenger hjelp til å designe en ren datamodell, legge til tilpassede felt og arbeidsflyter, eller bygge et komplett Odoo-modul fra bunnen av, er vårt team her for å hjelpe. Ta kontakt med oss og la oss snakke om ditt Odoo-prosjekt.

Datofelt i Odoo: Den Ultimative Guiden
Dasolo 6. mars 2026
Share this post
Logg inn to leave a comment