Introduktion
Tekstfeltet er et af de mest anvendelige felttyper i Odoo. Når en bruger skriver noter, udfylder en produktbeskrivelse eller lægger en intern kommentar på en ordre, er der stor sandsynlighed for, at det sker i et tekstfelt.
I brugergrænsefladen fremstår det som en simpel tekstboks, men kendskab til feltets egenskaber og dets plads i Odos datamodel og ORM gør en stor forskel, når du designer formularer, bygger tilpassede moduler eller opsætter felter i Odoo Studio til dine kolleger.
Denne vejledning gennemgår, hvad et tekstfelt gemmer, hvordan det opfører sig, konkrete forretningsscenarier, tekniske måder at tilføje det på, bedste praksis samt de fejl, mange begår, når de vælger denne felttype.
Hvad er tekstfeltet i Odoo
I Odoos ORM svarer fields.Text til et felt, der gemmer tekst på flere linjer. Det mappes til en PostgreSQL TEXT-kolonne uden længdebegrænsning. Brugere kan skrive alt fra en kort sætning til flere afsnit, og feltet håndterer begge dele uden problemer.
I formularer vises feltet som et størrelsesbart <textarea>. I lister vises teksten afkortet, og i søgefelter kan du filtrere på tekstindhold ligesom med et Char-felt.
Her er et eksempel på, hvordan et simpelt tekstfelt defineres i en Python-model:
from odoo import fields, models
class SaleOrder(models.Model):
_inherit = 'sale.order'
internal_notes = fields.Text(
string='Internal Notes',
translate=False,
)
I Odoo Studio hedder feltet Multi-Line Text. Felter oprettet i Studio får automatisk præfikset x_studio_. Opretter du feltet i kode eller via XML-RPC, vælger du selv det tekniske navn.
Hvordan det adskiller sig fra Char og Html
Der er tre Odoo-felttyper til tekst, og det er vigtigt at vælge den rigtige afhængigt af indholdets karakter og brugsscenariet:
- Char-felt: Enkeltlinje tekstinput. Velegnet til korte værdier som navne, koder og referencer. Kan have en størrelsesbegrænsning.
- Text-felt: Flere linjer i et textarea. Godt til noter, beskrivelser og fritekst. Gemmer almindelig, uformateret tekst uden markup.
- Html-felt: Rich text-editor. Bruges hvor formatering er nødvendig — fx e-mail-skabeloner, produkttekster til web eller web-sider. Gemmer HTML-markup.
Text-feltet ligger imellem Char og Html: det giver plads til længere indhold uden at introducere HTML-kompleksitet. Til interne noter og simple beskrivelser er det som regel det rigtige valg.
Hvordan feltet fungerer
Når du tilføjer et Text-felt til en model, opretter Odoo automatisk en tilsvarende TEXT-kolonne i PostgreSQL ved installation eller opgradering af modulet. Ingen manuelle SQL-migrationer er nødvendige.
Modsat Char-felter findes der ingen size-parameter for Text. Databasen sætter ingen begrænsning—det er tilsigtet, fordi Text-felter er beregnet til åben tekst, hvor det ikke giver mening at sætte en hård grænse på forhånd.
Væsentlige feltattributter
De vigtigste egenskaber, du skal kende om Text-feltet i Odoo-frameworket:
- translate: Sæt til
Truefor at gøre feltet oversætteligt pr. sprog. Nødvendigt for fler-sprogede opsætninger, hvor indholdet varierer efter brugerens sprog. - required: Gør feltet obligatorisk både i UI og i ORM. Brugere kan ikke gemme en post uden at udfylde feltet.
- default: Angiver en standardværdi for nye poster. Kan være en statisk streng eller et kallbart Python-metodekald.
- compute: Knytter en Python-metode, der beregner feltets værdi dynamisk — nyttigt til automatisk genererede summer eller afledt tekst.
- store: Kombineret med
computestyrer det, om den beregnede værdi gemmes i databasen.store=Truegør feltet søgbart og tilgængeligt i rapporter. - copy: Styrer om feltets værdi kopieres ved duplikering af en post. Standard er
True; sætFalsefor noter, der ikke skal følge med kopier. - index: Bruges sjældent på Text-felter, da fuldtekstssøgning i PostgreSQL håndteres anderledes end en simpel B-tree for Char-felter. Til søgbart indhold er fuldtekst eller Odos indbyggede filtre normalt tilstrækkeligt.
Visning i forskellige view-typer
I formularer vises feltet som et vertikalt størrelsesbart <textarea>, i lister afkortes teksten efter kolonnebredden, og i søgninger kan feltet bruges direkte i tekstfiltre, hvis det er tilføjet i søgeviewet.
I modsætning til Html-felter indlæses der ingen WYSIWYG-editor til Text. Brugeren ser en ren tekstboks uden formatteringsværktøj, og hvad der tastes, gemmes med linjeskift bevaret.
Samarbejde med Odoo-ORM'en
For udviklere er det enkelt at læse og skrive Text-felter: man tilgår værdien på record-objektet, og ORM håndterer persistensen. Linjeskift bevares, og der sker ingen automatisk sanitization eller escaping — det er netop en af forskellene til Html-feltet, hvor Odoo filtrerer indhold for at forhindre XSS.
Forretningsscenarier
Hvor Text-felter typisk bruges i virksomheder — fem konkrete eksempler
Salg: interne ordrekommentarer
På salgsordrer bruges ofte et note-felt til interne beskeder. Sælgere noterer leveringsønsker, særlige pakkeanvisninger eller kundepræferencer, som ikke skal fremgå af kunde-dokumenter, men som operationelt personale har brug for at se.
Lager: produktnoter til interne teams
Produktformularen har en Notes-fane med et Text-felt til interne bemærkninger. Lagermedarbejdere skriver håndteringsinstrukser, brud- eller fragilitetsadvarsler og leverandørspecifikke oplysninger, som ikke skal vises offentligt.
Indkøb: leverandøraftaler og leveringsinstrukser
På indkøbsordren kan et Text-felt samle aftalte leveringsvilkår eller særlige instrukser aftalt via telefon eller e-mail, så informationen følger ordren og mindsker misforståelser ved modtagelse.
CRM: mødereferater og pipeline-noter
I CRM bruges Text-felter til fritekst fra møder, salgsindvendinger eller anden kontekst om købsprocessen. Et dedikeret felt gør det nemt for en kollega at få overblik, når en sag skifter hænder — i modsætning til chatter, som kan være spredt.
HR: medarbejder- og kandidatkommentarer
HR-ansvarlige gemmer interviewnotater, onboarding-kommentarer eller observationspunkter direkte på medarbejder- eller kandidatposten. Et Text-felt er en enkel måde at fastholde disse oplysninger uden at oprette en ny model.
Oprettelse og tilpasning af tekstfeltet
Tre måder at tilføje et Text-felt på, afhængigt af teknisk situation og deployment
Via Odoo Studio (No-code)
Odoo Studio er den hurtigste løsning for forretningsbrugere og konsulenter, der ikke vil kode. Sådan gør du uden udvikling:
- Åbn Odoo Studio fra hovedmenuen (kræver Studio-app'en).
- Gå til den formular, hvor feltet skal være.
- Træk et Multi-Line Text ind på formularen fra Studio-sidepanelet.
- Sæt label, obligatorisk-status og eventuel standardværdi i feltets egenskaber.
- Gem og luk Studio.
Studio opretter feltet og opdaterer viewet automatisk. Feltet får x_studio_-præfiks og er straks tilgængeligt uden DB-migration eller servergenstart.
Via Python i et custom modul
For ændringer, der skal versioneres og rulles ud til flere miljøer, er det rigtige at definere feltet i Python — standard praksis i Odoo-udvikling:
from odoo import fields, models
class ResPartner(models.Model):
_inherit = 'res.partner'
x_client_notes = fields.Text(
string='Client Notes',
translate=False,
copy=False,
)
Efter definitionen tilføjer du feltet i den relevante view-XML, så det vises i UI. Odoo opretter DB-kolonnen ved installation/upgrade af modulet. Denne fremgangsmåde anbefales til produktionsopsætninger, der skal vedligeholdes over tid.
Via XML-RPC API
Hvis du administrerer felter programmatisk — fx i deploymentscripts eller eksterne konfigurationsværktøjer — kan du oprette Text-felter via XML-RPC API'en:
field_id = models.execute_kw(
ODOO_DB, uid, ODOO_API_KEY,
'ir.model.fields', 'create',
[{
'name': 'x_client_notes',
'field_description': 'Client Notes',
'model_id': model_id,
'ttype': 'text',
'state': 'manual',
'translate': False,
'copy': False,
}]
)
Værdien ttype: text instruerer Odoo om at oprette et Text-felt (i modsætning til char eller html). state: manual angiver, at feltet er oprettet uden for et modul — korrekt for felter lavet i Studio eller via API. Dette er en metode, som vi hos Dasolo bruger til fjernudrulning af feltkonfigurationer.
Gode fremgangsmåder
1. Brug Text når indholdet faktisk kræver flere linjer
En hyppig fejl er at vælge Text for korte værdier. Hvis feltet kun skal indeholde et navn, kode eller reference, er Char den bedre løsning. Text skal reserveres til tekst, der forventes at være sætninger eller afsnit — ellers bliver UI tungt og datamodellen vildledende.
2. Brug Html når formatering er vigtig
Hvis brugere skal indsætte punktopstillinger, fed skrift, links eller anden visuel styling, er Text ikke velegnet. Vælg Html-feltet i stedet. At forlange formatering i en almindelig tekstboks skaber frustration hos brugerne.
3. Aktivér translate for brugerrettet, flersproget indhold
I multisprogede virksomheder bør Text-felter, der vises for kunder eller på websitet, have translate=True. Det lader oversættere levere sprog-specifikke versioner uden at overskrive hinandens arbejde. Interne noter behøver typisk ikke at være oversættelige.
4. Sæt copy=False på noter, der ikke må duplikeres
Tekstfelter kopieres som standard ved duplikering af poster. For kontekstspecifikke noter, fx en kundesamtale, kan det skabe forvirring. Sæt copy=False for at sikre, at kopier starter uden tidligere noter.
5. Brug compute + store=True til automatisk genererede resuméer
Text-felter kan være beregnede. Et nyttigt mønster er at samle et kort, automatisk resumé fra andre felter. Med store=True og passende @api.depends() bliver summen gemt i databasen og søgbar, hvilket er praktisk til interne oversigter uden at bygge separate rapporter.
Almindelige fejltrin
Fejl: Vælge Text når Html er påkrævet
Hvis indholdet skal vises formatteret på web eller i PDF-rapporter, vil Text fjerne al styling. Brugere, som indsætter punktopstillinger eller fed tekst i en Text-boks, vil opleve, at alt bliver fladt. Overvej altid output-kanalen før valg af felttype.
Fejl: Vælge Text når Char er tilstrækkeligt
Et Text-felt giver en høj, størrelsesbar tekstboks. Hvis feltet kun skal indeholde korte værdier som trackingnumre eller varianter, bliver formularen unødigt tung. Enkeltlinjeindhold hører hjemme i et Char-felt.
Glemme translate på flersprogede labels og beskrivelser
Manglende translate=True på brugerrettede Text-felter betyder, at alle brugere ser samme værdi uanset sprogindstilling. Det er især problematisk for produktbeskrivelser og kategori-noter. Rettelsen er enkel, men efterfølgende migration kræver forsigtighed for ikke at overskrive eksisterende tekster.
Brug af Text til strukturerede data
At gemme JSON, pipe-separerede værdier eller anden struktureret data i et Text-felt fører til vedligeholdelsesmareridt. Hvis indholdet har et fast format, bør det ligge i passende felt-typer: Selection, Many2one eller en relateret model. Struktur i fritekst gør filtrering og rapportering umulig.
Glemme at tilføje feltet i søgeviewet
Et Text-felt med vigtig information, som ikke er tilføjet søgeviewet, kan ikke søges fra listevisningen. Brugere ender med at scrolle manuelt i stedet for at søge på nøgleord. Tilføj feltet i søgeviewet, hvis det skal være søgbart.
Konklusion
Tekstfeltet ser måske simpelt ud, men spiller en central rolle, når du begynder at designe formularer seriøst.
At vælge korrekt mellem Char, Text og Html er en tidlig beslutning i ethvert Odoo-projekt — få det rigtigt fra starten, så undgår du omskrivninger og datakvalitetsproblemer senere.
Uanset om du tilføjer et notefelt i Odoo Studio, definerer det i et Python-modul eller opretter det via API, vil mønstrene i denne guide hjælpe dig med at træffe det rigtige valg og konfigurere feltet korrekt.
En robust Odoo-datamodel bygges af mange små, velovervejede valg. At vælge den rigtige felttype til hver oplysning er et af dem — brugt rigtigt er Text-feltet et fleksibelt værktøj til at fange indhold, som ikke passer ind i stramt strukturerede felter.
Hos Dasolo hjælper vi virksomheder med implementering, tilpasning og optimering af Odoo i alle afdelinger. Har I brug for hjælp til datamodel, tilpassede felter eller en komplet implementering, står vores team klar til at bistå. Kontakt os og lad os tage en snak om dit Odoo-projekt.