Introduktion
Char-feltet er en af de mest anvendte felt-typer i Odoo. Når du ser et kundenavn, en varenummerkode eller en kort note på en salgsordre, er chancen stor for, at du interagerer med et Char-felt—det er kort tekst, enkelt og overalt i systemet.
At forstå dette felt er relevant både for ikke-tekniske brugere, der tilpasser skærmbilleder i Odoo Studio, for udviklere, der bygger moduler, og for konsulenter, der skal designe et holdbart datamodel-layout for kunder.
Feltet virker simpelt, men der er flere egenskaber og valg, som påvirker datahygiejne og brugeroplevelse. Denne guide forklarer, hvad feltet gemmer, hvordan det opfører sig i brugerfladen, hvordan du opretter det, og konkrete eksempler fra daglig forretningsbrug.
Hvad er et Char-felt i Odoo?
I Odoos ORM er Char-feltet beregnet til korte tekststrenge. På databaseniveau bliver det enten en VARCHAR(n) eller et TEXT-felt i PostgreSQL, alt efter om du angiver en maksimal længde.
Set fra brugerens side fremstår et Char-felt som et enkeltlinje tekstfelt i formularer og som almindelig tekst i lister. Det er det oplagte valg til navne, koder, referencer og andre korte, enkeltlinjede værdier.
Eksempler på definitioner i kode viser typisk feltets tekniske parametre (label, størrelse, indeks), men selve syntaksen er sekundær for forståelsen: pointen er, at feltet deklareres på modellen og vises i visningerne.
I et modul defineres feltet i Python, hvor du angiver måltekst, længdebegrænsning og andre indstillinger. Den tekniske implementering oprettes sammen med modulets installation, så databasen får den nye kolonne automatisk.
Parametrene i definitionen styrer både, hvordan feltet vises og hvordan databasen håndterer det: label (= hvad brugeren ser), size (=maks antal tegn), index (=opret søgeindeks) er de mest hyppige.
Når du bruger Odoo Studio, kaldes samme type felt ofte bare for "Text (single line)" og får automatisk et x_studio_-præfiks. Ved kodning vælger du selv det tekniske navn, hvilket er vigtigt for vedligeholdelse.
Hvordan feltet fungerer
Odoo sørger selv for at skabe og ændre kolonner i databasen, når du installerer eller opgraderer moduler—du behøver normalt ikke lave håndskrevne SQL-migrationer for Char-felter.
Teknisk gemmes ubundne Char-felter som TEXT, mens felter med size bruges som VARCHAR(n). PostgreSQL håndterer begge effektivt; størrelsesangivelsen er primært en måde at håndhæve længdebegrænsning på.
Nøgleattributter for Char-feltet
Her er de vigtigste egenskaber, du bør have styr på, når du arbejder med Char-felter i Odoo.
- size: Maksimalt antal tegn. Udelad size, og der er ingen databasebegrænsning på længden.
- translate: Sæt til True hvis feltet skal kunne oversættes pr. sprog — afgørende i flersprogede installationer.
- required: Gør feltet obligatorisk både i brugerfladen og på modelniveau.
- default: Angiver en standardværdi ved oprettelse af nye poster.
- index: Opretter et databaseindeks for hurtigere søgninger og filtreringer.
- compute: Kobler feltet til en Python-metode, så værdien kan beregnes dynamisk (brugbart til afledte værdier).
- store: Bruges sammen med compute for at bestemme, om det beregnede resultat skal gemmes i databasen.
- copy: Styrer om værdien kopieres ved duplikering af poster; standarden er True.
Hvordan det vises i visninger
I formularer vises Char som et almindeligt input-felt; i lister som tekst; i søgeren kan du bruge standardoperatorer som indeholder, er lig med eller starter med—så det er praktisk til hurtig filtrering.
Du kan også kombinere feltet med widgets for at ændre fremtoningen: et email-widget gør det klikbart som en mailadresse, et url-widget åbner linket i en ny fane osv.
Interaction med Odoo ORM
Udviklermæssigt læses og skrives Char-felter direkte på rekordobjektet, og frameworket tager sig af validering og sanitering i henhold til feltdesignet. Der sker ingen komplekse konverteringer, hvilket gør Char-feltet enkelt at bruge i dagligt udviklingsarbejde.
Forretningsscenarier hvor Char-feltet bruges
Eksempler fra virkeligheden — hvor feltet bruges hver dag
CRM: Kundeinterne referencekoder
Mange virksomheder opbevarer et internt kundenummer på partneren for at undgå forveksling ved lignende navne. Et Char-felt på res.partner gør disse koder søgbare og synlige på salgsordrer og fakturaer, hvilket sparer tid for salgsteamet.
Salg: Kunde PO-referencer
Kundernes PO-numre skal ofte vises på fakturaer og leveringsdokumenter. Et Char-felt til kundens ordrenummer flyder ofte automatisk igennem fakturaer og mindsker behovet for opfølgende korrespondance.
Lager: Interne varenumre
Default_code på product.template er et klassisk Char-felt til interne varenumre. Det bruges i lagre, stregkodescannere og indkøb—ensartethed i det felt er afgørende for korrekt logistik og indkøbsflow.
Regnskab: Moms- og registreringsnumre
Momsnumre, CVR-numre og andre registreringsnumre gemmes som Char-felter på partneren. Når de er konfigureret korrekt, fremgår de automatisk af kundefakturaer og leverandørfakturaer, hvilket mindsker manuel opfriskning af data.
HR: Medarbejder-id og adgangskoder
HR registrerer ofte medarbejdernumre, adgangskoder til adgangssystemer eller eksterne løn-ID'er i Char-felter. Det gør det nemt at knytte Odoo-poster til andre systemer uden et fuldt integrationsprojekt fra dag ét.
Sådan opretter eller tilpasser du et Char-felt
Tre måder at oprette et Char-felt på, afhængigt af dit setup
Brug af Odoo Studio (no-code)
Odoo Studio er Odoos visuelle værktøj til hurtige tilpasninger. Sådan tilføjer du et Char-felt uden kode:
- Åbn Odoo Studio fra hovedmenuen.
- Gå til den formular, hvor feltet skal være.
- Træk et enkeltlinje tekstfelt ind på formularen.
- Angiv label, obligatorisk-status og eventuelt længdebegrænsning i feltets egenskaber.
- Gem og luk Studio.
Studio opretter feltet automatisk med et x_studio_-præfiks og tilføjer det i visningen—ingen manuel database-migration nødvendig.
Definere feltet i et custom modul (Python)
For udviklere, der arbejder med versioneret kode, defineres feltet i Python i modulets modelfiler. Det er den bedste praksis til produktionsopsætninger, der skal deployes til flere miljøer.
En typisk definition specificerer feltets tekniske navn, label, størrelse, om det skal-indekseres, og om det kopieres ved duplikering. Efterfølgende tilføjer du feltet i view-XML, så det bliver synligt i UI.
Når modulet installeres eller opgraderes, håndterer Odoo kolonneoprettelsen i databasen automatisk.
Oprettelse via XML-RPC API
Hvis du styrer konfigurationer programmatisk—f.eks. i en deployments-pipeline eller et automatiseringsskript—kan du oprette feltet via XML-RPC API'en.
Ved API-oprettelse angiver du teknisk navn, model, felt-type (char), størrelse og sætter feltets tilstand til manuel, når det ikke oprettes fra et modul.
At markere state='manual' fortæller Odoo, at feltet er oprettet uden for et modul—samme måde Studio markerer sine felter på, og hvordan eksterne scripts bør gøre det.
Gode fremgangsmåder
1) Angiv størrelse når du kender maks længde
Hvis feltet kun skal indeholde f.eks. landekoder eller faste id'er, angiv size. Det kommunikerer formålet og forhindrer utilsigtet indsættelse af overdrevne værdier.
2) Tilføj indeks på ofte søgte felter
Hvis brugere regelmæssigt filtrerer efter feltet—kunde- eller ordrenummer—brug index=True. På store tabeller kan et indeks være forskellen mellem en hurtig søgning og en langsom fuld tabel-scanning.
3) Brug translate=True til brugerrettet flersprog
Når feltets værdi skal vises forskelligt afhængigt af brugerens sprog—såsom jobtitler eller produktnavne—aktiver oversættelse, så lokale brugere ser relevante tekster i deres sprog.
4) Giv felterne klare tekniske navne
Vælg sigende tekniske navne i custom kode. Et navn som x_customer_erp_id er langt lettere at vedligeholde end x_field1. I Studio bør du også rette navnet inden deployment, da tekniske navne er svære at ændre senere.
5) Brug compute til afledte referencer
Char-felter kan beregnes dynamisk. F.eks. kan en reference, der kombinerer årstal og en sekvens, genereres i en compute-metode og gemmes med store=True, så den kan bruges i søgninger og rapporter uden at blive genberegnet ved hver visning.
Almindelige faldgruber
Farligt at lade størrelsen være ubegrænset
Uden size kan brugere indsætte lange beskrivelser i et felt, der senere skal på tryk eller eksporteres til systemer med stramme begrænsninger. Definér en rimelig længde, hvor det er relevant.
Manglende indeks på ofte søgte felter
Hvis et felt bruges til filtrering i lister og søgeresultater, men mangler indeks, bliver hver søgning en fuld tabel-scanning—et problem der først opdages, når datamængden vokser.
Forveksling mellem Char og Text
Char er til korte enkeltlinjer. Text er til længere, multiline indhold. Brug ikke Char til adresser eller noter, hvor brugeren forventer linjeskift og wrap — vælg Text i stedet.
Glem ikke translate på flersprogede felter
Manglende oversættelse betyder, at alle sprogbrugere ser den samme tekst. For kunde- eller produktfelter, som er brugerrettede, fører det til forvirring i internationale opsætninger.
Brug ikke Char når Selection eller relation er passende
Hvis feltet kun må indeholde et begrænset sæt værdier, er en Selection eller Many2one mere korrekt. Char-fri tekst fører ofte til stavefejl og variationer, som gør rapportering og gruppering upræcis.
Ofte stillede spørgsmål (FAQ)
Hvad er forskellen på Char og Text i Odoo?
Char gemmer korte enkeltlinje-tekster og vises som et text-input. Text gemmer længere multiline-tekster og vises som et textarea. Brug Char til navne, koder og referencer; brug Text til beskrivelser og noter.
Kan jeg begrænse antal tegn i et Char-felt?
Ja. Angiv size i definitionen (f.eks. fields.Char(size=64)). I Studio kan du sætte længdebegrænsning i feltets egenskaber. Uden size er der ingen databasebegrænsning.
Hvordan får jeg et Char-felt til at fremgå i søgeren?
Add the field to the search view of the model. In Studio, enable the search option in the field properties. In code, add <field name="your_char_field"/> inside the <search> view definition in your XML. Once added, users can filter records by that field directly from the search bar.
Kan jeg gemme tal i et Char-felt?
Teknisk ja, men undgå det til beregningsmæssige værdier. Brug Integer eller Float når du skal regne på data. Char er godt til tal der behandles som tekst—postnumre, telefonnumre, IBAN eller serienumre.
Hvordan laver jeg et beregnet Char-felt, som også gemmer værdien?
Definér feltet med compute='_compute_my_field' og store=True. Skriv compute-metoden og brug @api.depends(...) for at angive afhængigheder. Med store=True bliver værdien gemt og søgbar uden genberegning ved hver læsning.
Konklusion
Char-feltet er enkelt, men vigtigt. De fleste bruger det konstant uden at tænke over det. Alligevel påvirker kloge valg omkring størrelse, indeks og typevalg både datakvalitet og brugeroplevelse markant.
Uanset om du opretter feltet i Studio, skriver en definition i et custom Python-modul eller laver det via API, hjælper mønstrene i denne guide dig med at undgå typiske fejl fra starten.
Et gennemarbejdet datamodel-design med de rette felttyper er en af de vigtigste byggesten i en succesfuld Odoo-implementering. Char-feltet er et lille, men centralt element i den puslespilsopbygning.
Hos Dasolo hjælper vi virksomheder med at implementere, skræddersy og optimere Odoo på tværs af funktioner. Vi assisterer med alt fra datamodel-design til udvikling af moduler og felter, så løsningen bliver holdbar i drift. Kontakt os og lad os tage en uforpligtende snak om dit Odoo-projekt.