Inledning
Textfältet är ett av de mest använda fälttyperna i Odoo. När någon skriver anteckningar, produktbeskrivningar eller interna kommentarer på en order är det ofta i ett Textfält de skriver.
På ytan ser det ut som ett enkelt textarea‑fält i gränssnittet, men att förstå dess egenskaper och hur det passar in i Odoos datamodell och ORM spelar stor roll när du bygger formulär, moduler eller skapar fält i Odoo Studio.
Denna guide går igenom vad Textfältet lagrar och hur det beter sig, visar praktiska användningsområden i verksamheten, beskriver hur du anpassar det tekniskt, och listar råd och vanliga misstag att undvika.
Vad är Textfältet i Odoo
I Odoos ORM motsvaras Textfält av fields.Text. Databasmässigt lagras det i en TEXT-kolumn i PostgreSQL, utan fast maximal längd. Användaren kan skriva allt från en mening till flera stycken utan att fältet strular.
I formulär visas det som ett storleksjusterbart <textarea>. I listvyer trunkeras innehållet. I sökfält kan det filtreras med textbaserade sökningar på samma sätt som kortare textfält.
Ett enkelt exempel på hur ett Textfält definieras i en Python‑modul ser ut ungefär så här:
from odoo import fields, models
class SaleOrder(models.Model):
_inherit = 'sale.order'
internal_notes = fields.Text(
string='Internal Notes',
translate=False,
)
I Odoo Studio heter samma fälttyp Multi‑Line Text. Fält som skapas via Studio får automatiskt ett x_studio_-prefix i det tekniska namnet. Skapar du fältet i kod eller via API kan du själv bestämma det tekniska namnet.
Skillnaden mot Char och Html
Odoo har tre vanliga textfältstyper — förstå skillnaden för att välja rätt i modellen:
- Char: Enradigt textfält. Lämpligt för korta värden som namn, koder eller referenser. Kan ha storleksbegränsning.
- Text: Flera rader, vanligt textarea. Passar anteckningar, beskrivningar och fria kommentarer. Lagrar vanlig text utan formatering.
- Html: Rikt textfält med WYSIWYG. Används när formatering krävs, exempelvis mallar, webbinnehåll eller formaterade produktbeskrivningar. Lagrar HTML‑markup.
Textfältet hamnar mitt emellan: mer plats än Char men utan HTML‑komplexitet. För interna anteckningar och enkla beskrivningar är Text ofta rätt val i Odoo.
Hur fältet fungerar
När du lägger till ett Textfält i en modell skapar Odoo automatiskt motsvarande TEXT-kolumn i PostgreSQL vid installation eller uppgradering av modulen — inga manuella SQL‑migrationer behövs.
Till skillnad från Char finns ingen size-parameter för Text‑fält. Kolumnen i databasen sätter ingen gräns för antal tecken, eftersom fältet är avsett för öppet, obegränsat innehåll.
Viktiga fältegenskaper
De mest relevanta attributen för ett Textfält i Odoo:
- translate: Om
Truekan värdet översättas per språk — viktigt för flerspråkiga installationer där texten ska variera beroende på användarens språk. - required: Gör fältet obligatoriskt i gränssnittet och på ORM‑nivå — posten kan inte sparas utan värde.
- default: Ställer in ett förvalt värde vid skapande av nya poster. Kan vara en statisk sträng eller en funktion.
- compute: Kopplar fältet till en Python‑metod som beräknar värdet dynamiskt — bra för autogenererade sammanfattningar eller härlett innehåll.
- store: Används tillsammans med
computeför att bestämma om det beräknade värdet ska sparas i databasen. Medstore=Trueblir värdet sökbart och rapporteringsbart. - copy: Bestämmer om fältet kopieras vid duplicering av en post. Standard är
True; sätt tillFalseför anteckningar som inte ska ärvas. - index: Vanligtvis inte användbart för Textfält eftersom vanliga B‑tree‑index inte fungerar bra för längre text. För sökbarhet är PostgreSQL fulltext‑sök eller Odoos filter ofta bättre alternativ.
Hur det syns i vyerna
I formulär visas Text som ett vertikalt justerbart <textarea>. I listor trunkeras texten. Om du lägger till fältet i sök‑vyn kan användare göra textbaserade sökningar direkt.
Till skillnad från Html‑fält laddas ingen WYSIWYG‑editor. Användaren ser ren text utan formateringsverktyg — det som skrivs sparas oförändrat med radbrytningar intakta.
Interaktion med Odoo ORM
För utvecklare är det enkelt att läsa och skriva Textfält: värdet hanteras direkt på record‑objektet och ORM tar hand om persistens. Radbrytningar sparas som de är. Textfält genomgår ingen automatisk sanering i samma utsträckning som Html‑fält, där Odoo filtrerar för att skydda mot XSS.
Affärsscenarier
Var Textfält används i praktiken — fem typiska exempel från verkliga arbetsflöden.
Försäljning: interna orderanteckningar
På försäljningsordrar finns ofta ett Textfält för interna noteringar. Säljare noterar leveransönskemål, speciell emballering eller kundpreferenser som inte passar i strukturerade fält. Dessa anteckningar följer ordern internt utan att automatiskt skrivas ut på kunddokument.
Lager: interna produktanteckningar
Produktformuläret har ofta en flik för Notes där lagerpersonalen skriver hanteringsinstruktioner, varningsrutiner eller leverantörsspecifika detaljer. Eftersom fältet är internt och oformaterat kan man skriva operativa kommentarer som inte ska visas externt.
Inköp: leverantörsvillkor och leveransinstruktioner
På inköpsordern används Textfält för att notera särskilda avtal eller leveransbegränsningar som bekräftats via e‑post eller telefon. Att ha detta knutet till ordern minskar risken för missförstånd när leveransen kommer.
CRM: mötesanteckningar och möjlighetsöversikter
I CRM används Textfält för att samla mötesanteckningar, kundinvändningar eller kontext om köpprocessen. Till skillnad från chattmeddelanden gör ett dedikerat Textfält informationen lättöverskådlig när en kollega tar över ett lead.
HR: intervjunoter och medarbetarkommentarer
HR team använder Textfält för att spara intervjunoter, onboardingskommentarer eller prestationstankar på medarbetar‑ eller kandidatposten. Det är ett enkelt sätt att lagra sådant som inte behöver ett eget modell‑objekt.
Skapa eller anpassa ett Textfält
Tre sätt att lägga till ett Textfält, beroende på teknisk nivå och distribution.
Via Odoo Studio (No‑Code)
Studio är snabbast för användare som inte vill koda. Så här gör du för att lägga till ett Textfält utan utveckling:
- Starta Odoo Studio från huvudmenyn (Studio‑appen krävs).
- Gå till det formulär där fältet ska ligga.
- Dra in ett Multi‑Line Text från Studio‑panelen till formuläret.
- Ange etikett, obligatoriskt läge och förvalt värde i fältets egenskaper.
- Spara och stäng Studio.
Studio skapar fältet och uppdaterar vyn åt dig. Fältet får ett x_studio_-prefix och blir omedelbart tillgängligt utan migrering eller serveromstart.
Via Python i en egen modul
För ändringar som ska versionshanteras och distribueras är det bästa att definiera fältet i Python i en modul — standardpraxis för produktionsanpassningar:
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 att ha deklarerat fältet måste du lägga till det i relevant vy‑XML så det syns i gränssnittet. Odoo skapar databaskolumnen vid installation/uppgradering av modulen — detta är rekommenderat för hanterbara, hållbara anpassningar.
Via XML‑RPC API
Om du automatiserar konfigurationer eller kör deploy‑skript kan du skapa Textfält programmässigt via XML‑RPC API:
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,
}]
)
Parametern ttype: 'text' instruerar Odoo att skapa ett Textfält. state: 'manual' visar att fältet skapats utanför en modul — vanligt för Studio‑ eller API‑skapade fält. Många konsulter använder samma metod för automatiserade fältkonfigurationer i klientprojekt.
Bra praxis
1. Använd Text när innehållet faktiskt kräver flera rader
Vanligaste misstaget är att välja Text för korta värden. Om fältet bara ska innehålla namn, koder eller referenser — använd Char. Text bör reserveras för fria kommentarer och längre anteckningar; annars blir gränssnittet klumpigt och datamodellen otydlig.
2. Välj Html när formatering behövs
Om användarna behöver punktlistor, fetstil, länkar eller annan visuell formatering är Text fel val. Html‑fältet ger verktyg för formatering. Att be användare skapa formaterat innehåll i en ren textarea leder till frustration.
3. Aktivera translate för kundnära flerspråkigt innehåll
I flerspråkiga installationer bör Textfält som syns för kunder eller på webbplatser ha translate=True. Det gör det möjligt för översättare att lägga in språk‑specifikt innehåll utan att skriva över varandras arbete. För interna anteckningar behövs det oftast inte.
4. Sätt copy=False för anteckningar som inte ska dupliceras
Textfält kopieras som standard vid duplicering. För kontextspecifika anteckningar, exempelvis kundsamtal eller specifika leveransproblem, kan det vara fel att ärva dem till nya poster. Sätt copy=False för att hålla duplicerade poster rena.
5. Använd compute + store=True för automatgenererade sammanfattningar
Du kan låta ett Textfält beräknas från andra fält och spara resultatet i databasen. Med store=True blir det sökbart och användbart i listor och rapporter — ett smidigt sätt att skapa interna summeringar utan att bygga separata rapportmodeller.
Vanliga fallgropar
Att välja Text när Html behövs
Om fältets innehåll ska visas formaterat på webb eller i PDF:er så försvinner all styling om du använder Text istället för Html. Klistra du in formaterat innehåll i ett Textfält blir det platt och oformaterat — kontrollera alltid utmatningskanalen innan du väljer fälttyp.
Att välja Text när Char är bättre
Ett Textfält ger en hög, justerbar textarea. För korta värden som följesedelsnummer eller artikelkoder blir formuläret onödigt stort. Ett Char‑fält tar mindre plats och är bättre för enkla, enradiga värden.
Glömmer translate på flerspråkiga etiketter och beskrivningar
I internationella installationer leder frånvaron av translate=True på kundnära Textfält till att alla ser samma text oavsett språkval. För produktbeskrivningar och synlig information är det en vanlig källa till irritation — rätt att ställa in i början, annars krävs en försiktig migrering senare.
Använder Text för strukturerad data
Att lagra JSON, röriga avgränsade strängar eller andra strukturer i ett Textfält skapar underhållsproblem. Strukturerad information bör ha lämpliga fälttyper: Selection, Many2one eller separata modeller. Fri text är inte ett substitut för en riktig datamodell.
Att inte lägga till fältet i sök‑vyn
Ett Textfält med viktig information som inte finns i sök‑vyn kan inte filtreras via listans sökfält. Användare får scrolla istället för att söka. Om fältet används för sökning — lägg till det i sök‑vyn vid skapandet.
Sammanfattning
Textfältet är ett av de grundläggande verktygen i Odoo som ser enkelt ut tills du börjar designa formulär på allvar.
Att välja rätt mellan Char, Text och Html är en tidig och viktig designbeslut i varje Odoo‑projekt — rätt val minskar behovet av omarbete och förbättrar datakvaliteten.
Oavsett om du lägger till ett anteckningsfält i Studio, deklarerar det i Python eller skapar det via API, hjälper principerna i denna guide dig att välja och konfigurera fältet korrekt för din konkreta användning.
En välbyggd Odoo‑datamodell består av många små, genomtänkta val. Att placera rätt fälttyp på rätt plats är en sådan avgörande detalj — och Textfältet, när det används i rätt sammanhang, är ett flexibelt och pålitligt verktyg för fria texter som inte passar i strukturerade fält.
På Dasolo hjälper vi företag att implementera, anpassa och optimera Odoo i hela organisationen. Behöver ni stöd med datamodell, fält, arbetsflöden eller en komplett Odoo‑implementation finns vårt team tillgängligt. Kontakta oss så tar vi ett samtal om ert Odoo‑projekt.