Hoppa till innehåll

Charfält i Odoo: Den Ultimata Guiden

Allt du behöver veta om Char-fältet i Odoo-datamodellen, från grundläggande användning till teknisk anpassning
6 mars 2026 av
Charfält i Odoo: Den Ultimata Guiden
Dasolo
| Inga kommentarer ännu

Introduktion


Char-fältet är en av de mest grundläggande fälttyperna i Odoo-datamodellen. Om du någonsin har tittat på ett kontakt namn, en produktreferens eller en försäljningsorderanteckning, har du interagerat med ett Char-fält utan att nödvändigtvis veta om det.


Att förstå hur denna fälttyp fungerar är viktigt oavsett om du är en affärsanvändare som konfigurerar formulär i Odoo Studio, en utvecklare som skriver anpassade moduler, eller en konsult som hjälper en klient att utforma sin Odoo-miljö.


Det ser enkelt ut vid första anblicken, men det finns flera egenskaper och beteenden som är värda att känna till för att använda det väl och undvika vanliga misstag. Denna guide går igenom allt från vad fältet lagrar och hur det beter sig i gränssnittet, till att skapa och anpassa det, tillsammans med verkliga affärsanvändningsfall.

Vad är Char-fältet i Odoo


I Odoo ORM är Char-fältet utformat för att lagra korta textsträngar. Det mappas till en VARCHAR eller TEXT-kolumn i PostgreSQL, beroende på om du definierar en storleksgräns.


Ur användarperspektiv visas ett Char-fält som en enradig textinmatning i formulär och som en vanlig textkolumn i listvyer. Det är det standardval som används för att lagra namn, koder, referenser, identifierare och andra korta textstycken som får plats på en rad.


Så här ser det ut i en Python-modelldefinition:

from odoo import fields, models

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

    customer_po_reference = fields.Char(
        string='Customer PO Reference',
        size=64,
        index=True,
    )

Parametern string ställer in etiketten som visas i gränssnittet. Parametern size, som är valfri, begränsar antalet tecken. Parametern index skapar ett databasindex för snabbare sökningar.


I Odoo Studio kallas detta samma fält för ett Text-fält (en rad). När det skapas genom Studio får det automatiskt ett x_studio_-prefix. När det skapas via kod eller XML-RPC API väljer du det tekniska namnet själv.

Hur fältet fungerar


När du definierar ett Char-fält i Odoo hanterar ramverket kolumnskapandet i databasen automatiskt under modulinstallation eller uppgradering. Det finns inget behov av att skriva SQL-migreringar manuellt.


I databasen lagras Char-fält utan storleksgräns som TEXT. De med en size-parameter använder VARCHAR(n). PostgreSQL behandlar båda typerna effektivt, så skillnaden handlar mest om att upprätthålla en längdbegränsning snarare än en stor prestandaskillnad.


Nyckelfältsattribut

Här är de viktigaste egenskaperna hos ett Char-fält i Odoo-ramverket:

  • size: Maximalt antal tecken. Utelämna detta och det finns ingen längdgräns på databasenivå.
  • translate: När den är inställd på True kan fältvärdet översättas per språk. Användbart i flerspråkiga implementeringar.
  • required: Gör fältet obligatoriskt i gränssnittet och på modellnivå.
  • default: Sätter ett automatiskt standardvärde när nya poster skapas.
  • index: Skapar ett databasindex för snabbare filtrering och sökning på det fältet.
  • compute: Kopplar en Python-metod som dynamiskt beräknar fältvärdet, användbart för härledda eller sammanfogade värden.
  • store: När den kombineras med compute, kontrollerar om det beräknade värdet sparas i databasen.
  • copy: Kontrollerar om fältvärdet kopieras när en post dupliceras. Standardinställningen är True.

Hur det visas i vyer

I formulärvyer renderas ett Char-fält som ett standard <input type="text"> element. I listvyer visas det som vanlig text. I sökvyer stöder det filter med hjälp av contains, equals och starts-with operatorer direkt.


Du kan också kombinera ett Char-fält med widgets i vyn för att ändra hur det visas. Till exempel gör email widgeten ett Char-fält till en klickbar e-postlänk, och url widgeten gör att det öppnas i en ny webbläsartab.


Interaktion med Odoo ORM

Från ett utvecklarperspektiv fungerar läsning och skrivning av Char-fält som vilket annat fält som helst i Odoo ORM. Du får åtkomst till värdet direkt på postobjektet, och ramverket hanterar sanering och validering baserat på fältdefinitionen. Det finns inga komplexa transformationer involverade, vilket är en del av vad som gör Char-fältet så praktiskt för vardagligt bruk i Odoo-utveckling.

Affärsanvändningsfall


Char-fältet förekommer i nästan varje hörn av en Odoo-implementering. Här är fem verkliga exempel från vanliga affärsarbetsflöden.


CRM: Kundreferensnummer

Många företag tilldelar interna referensnummer till sina kunder. Ett Char-fält på res.partner-modellen kan lagra denna kod, vilket gör den sökbar från kundlistan och synlig på försäljningsorder och fakturor. Försäljningsteam kan snabbt hämta rätt konto utan förvirring när flera kunder har liknande namn.


Försäljning: Inköpsordernummer

När kunder skickar inköpsorder inkluderar de ett PO-nummer som behöver visas på fakturor och leveransdokument. Det inbyggda client_order_ref-fältet på sale.order är ett Char-fält. Det flödar automatiskt till fakturan, vilket minskar fram och tillbaka med kunden om saknade referenser.


Lager: Interna produktreferenser

Fältet default_codeproduct.template är ett inbyggt Char-fält i Odoo. Det lagrar den interna referensen som används över lager, streckkodsläsare och inköpsorder. Att hålla detta fält rent och konsekvent är en av de vanligaste datakvalitetsprioriteringarna i lagerimplementeringar.


Bokföring: Skatt- och registreringsnummer

Momsnummer, skatte-ID och företagsregistreringsnummer lagras som Char-fält på partnerregister. Dessa värden visas automatiskt på kundfakturor och leverantörsfakturor när de är korrekt konfigurerade. För företag som verkar i flera länder sparar det mycket manuellt korrigeringsarbete att ha dessa data pålitligt lagrade på ett ställe.


HR: Anställdas identifierare och ID-koder

HR-team behöver ofta lagra anställdas ID-nummer, ID-koder eller identifierare från externa löne- eller åtkomstkontrollsystem. Ett Char-fält på anställdemodellen gör det enkelt att koppla Odoo-poster med andra affärsverktyg utan att behöva en fullständig integration från dag ett.

Skapa eller anpassa Char-fältet


Det finns tre huvudsakliga sätt att lägga till ett Char-fält till en Odoo-modell, beroende på din tekniska uppsättning och distributionsmetod.


Använda Odoo Studio (Ingen kod)

Odoo Studio är det inbyggda lågkodanpassningsverktyget. För att lägga till ett Char-fält utan att skriva någon kod:

  1. Öppna Odoo Studio från huvudmenyn.
  2. Navigera till formuläret där du vill ha fältet.
  3. Dra ett Text-fält (enkel rad) från sidofältet till formuläret.
  4. Ställ in etiketten, obligatorisk status och eventuellt en storleksgräns i fältets egenskapspanel.
  5. Spara och stäng Studio.

Studio skapar automatiskt fältet med ett x_studio_-prefix och lägger till det i formulärvyn. Ingen databasöverföring behövs från din sida.


Använda Python i en anpassad modul

För utvecklare som bygger Odoo-moduler definieras Char-fält i Python-modellfiler. Detta är den rekommenderade metoden för alla anpassningar som behöver versionskontrolleras och distribueras över flera miljöer:

from odoo import fields, models

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

    x_erp_customer_id = fields.Char(
        string='ERP Customer ID',
        size=32,
        index=True,
        copy=False,
    )

Efter att ha lagt till fältet i modellen måste du också lägga till det i den relevanta vy XML-filen så att det visas i gränssnittet. Odoo hanterar skapandet av databasens kolumn när du installerar eller uppgraderar modulen.


Använda XML-RPC API

Om du hanterar Odoo-anpassningar programmässigt, till exempel som en del av en distributionspipeline eller en fjärrkonfigurationsnotebook, kan du skapa Char-fält via XML-RPC API:

field_id = models.execute_kw(
    ODOO_DB, uid, ODOO_API_KEY,
    'ir.model.fields', 'create',
    [{
        'name': 'x_custom_reference',
        'field_description': 'Custom Reference',
        'model_id': model_id,
        'ttype': 'char',
        'size': 64,
        'state': 'manual',
    }]
)

Värdet state: manual talar om för Odoo att detta fält skapades manuellt (inte av en modul), vilket är den korrekta inställningen för fält som skapats genom Studio eller API. Så här hanterar Dasolo fjärrfältsskapande för kunder som en del av automatiserade konfigurationsskript.

Bästa praxis


1. Sätt en storlek när du vet den maximala längden

Om fältet lagrar ISO-landskoder, telefonnummer eller fasta identifierare, definiera en size. Detta kommunicerar avsikt till alla som läser modellen och förhindrar oavsiktliga dataregistreringsfel. Ett fält som är avsett att lagra en tvåbokstavskod för ett land bör inte tyst acceptera en 500-teckens sträng.


2. Lägg till ett index för fält som du söker ofta

Om användare regelbundet filtrerar eller söker poster efter ett Char-fält, som en kundkod eller orderreferens, sätt index=True. På tabeller med tiotusentals poster kan detta göra skillnaden mellan en sökning på en sekund och en väntetid på tio sekunder.


3. Använd translate=True för flerspråkigt innehåll

Om din Odoo-instans betjänar användare på flera språk och ett fält innehåller text som varierar beroende på språk, aktivera översättning. Detta är viktigt för produktnamn, jobbtitlar eller något fält vars värde användare i olika regioner skulle förvänta sig att se på sitt eget språk.


4. Ge fält tydliga och konsekventa tekniska namn

I anpassade moduler, namnge fält beskrivande. Ett fält som heter x_customer_erp_id är mycket mer underhållbart än x_field1. Om du använder Studio, döp om fältet i egenskapspanelen innan du distribuerar det. Tekniska namn kan inte enkelt ändras senare när data har lagrats.


5. Använd compute för härledda referenser

Char-fält kan beräknas dynamiskt. Till exempel kan en referens som kombinerar ett år och ett sekvensnummer byggas som ett beräknat Char-fält. Med store=True sparas värdet i databasen och kan användas i sökfilter och rapporter, medan beräkningslogiken förblir centraliserad i en metod.

Vanliga fallgropar


Ingen storleksgräns öppnar dörren för dåliga data

Utan en storleksbegränsning kan användare klistra in hela stycken i ett referensfält. Detta är ett verkligt problem när värdet senare visas på tryckta dokument eller skickas till externa system med strikta teckenbegränsningar. Definiera alltid en rimlig storlek för fält där längden är viktig.


Saknade index på ofta sökta fält

Utan ett index innebär filtrering av ett Char-fält på en stor tabell en fullständig tabellskanning. Många team upptäcker detta problem först efter att deras databas har vuxit till en betydande storlek. Om ett fält används regelbundet i listvyns filter eller sökfält, lägg till indexet från början.


Förvirra Char med Text-fält

Char-fältet är för kort text på en rad. Text-fältet är för längre innehåll på flera rader. Att använda ett Char-fält för adresser, anteckningar eller beskrivningar leder till en dålig användarupplevelse, eftersom inmatningen inte kommer att brytas eller tillåta radbrytningar. Om innehållet realistiskt kan sträcka sig över flera meningar, använd istället ett Text-fält.


Glömma att översätta på flerspråkiga fält

I företag som verkar i flera länder innebär att man missar translate=True alternativet på ett användarvänligt fält att alla språkbrukare ser samma värde. Detta kan orsaka förvirring på kundinriktade dokument där fältinnehållet bör anpassas till dokumentets språk.


Använda Char för data som borde vara ett val eller relation

Om ett fält alltid innehåller ett av ett begränsat antal värden, som en kategori, en status eller ett land, bör det vara ett urvalsfält eller en Many2one-relation, inte ett Char-fält. Att använda Char för detta skapar inkonsekventa värden över poster och gör filtrering och rapportering opålitlig. Fritekstfält inbjuder till stavfel och variationer som bryter gruppering och analys.

FAQ


Vad är skillnaden mellan ett Char-fält och ett Text-fält i Odoo?

Ett Char-fält lagrar korta enradiga texter och renderas som ett textinmatningsfält i formulär. Ett Text-fält lagrar längre fleradiga innehåll och renderas som en resizable textarea. Använd Char för namn, koder och referenser. Använd Text för beskrivningar, anteckningar och allt som användare kan skriva flera meningar för.


Kan jag begränsa antalet tecken som lagras i ett Char-fält?

Ja. Använd size-parametern när du definierar fältet i Python, till exempel fields.Char(size=64). I Odoo Studio kan du ställa in denna begränsning i fältets egenskapspanel. Om ingen storlek anges har fältet ingen tvingande längdbegränsning på databasnivå.


Hur får jag ett Char-fält att visas i sökfältet?

Lägg till fältet i sökvyn för modellen. I Studio, aktivera sökalternativet i fältets egenskaper. I kod, lägg till <field name="your_char_field"/> inuti <search>-vydefinitionen i din XML. När det har lagts till kan användare filtrera poster efter det fältet direkt från sökfältet.


Kan jag lagra siffror i ett Char-fält?

Tekniskt sett ja, men det rekommenderas inte för värden som behöver beräkning eller numerisk jämförelse. Använd Integer- eller Float-fält för kvantiteter och belopp. Char är lämpligt för strängar som råkar innehålla siffror, såsom postnummer, telefonnummer, IBAN-nummer eller serienummer, där värdet behandlas som text snarare än ett nummer.


Hur skapar jag ett beräknat Char-fält som också lagrar sitt värde?

Definiera fältet med compute='_compute_my_field' och store=True. Skriv beräkningsmetoden med @api.depends() för att deklarera vilka andra fält som utlöser omberäkningen. Med store=True sparar Odoo det beräknade värdet i databasen, vilket gör det tillgängligt i sökningar, filter och exporter utan att behöva omberäkna vid varje läsning.

Slutsats


Char-fältet är bedrägligt enkelt. De flesta människor interagerar med dussintals av dem varje dag i Odoo utan att tänka på det. Men när du bygger eller anpassar ett Odoo-system gör förståelsen av dess egenskaper, dess databashantering och när du ska använda det jämfört med andra fälttyper en verklig skillnad i kvaliteten på din datamodell.


Oavsett om du lägger till en kundreferens genom Odoo Studio, definierar ett fält i en anpassad Python-modul eller skapar fält programmässigt via API:et, kommer de mönster som beskrivs i denna guide att hjälpa dig att få det rätt första gången.


En väl utformad datamodell byggd på rätt fälttyper är en av de viktigaste grundpelarna i en framgångsrik Odoo-implementering. Char-fältet är en liten del av det pusslet, men det är en del som är värd att förstå ordentligt.

På Dasolo hjälper vi företag att implementera, anpassa och optimera Odoo över alla avdelningar. Oavsett om du behöver hjälp med att designa en ren datamodell, lägga till anpassade fält i dina arbetsflöden eller bygga en fullständig Odoo-modul från grunden, så finns vårt team här för att hjälpa till. Kontakta oss och låt oss prata om ditt Odoo-projekt.

Charfält i Odoo: Den Ultimata Guiden
Dasolo 6 mars 2026
Dela detta inlägg
Logga in att lämna en kommentar