Hoppa till innehåll

Anpassade Fält i Odoo: Den Fullständiga Guiden

Lär dig hur du kan utöka valfri Odoo-modell med anpassade fält med hjälp av Odoo Studio eller Python, och varför det är viktigt för ditt företag
6 mars 2026 av
Anpassade Fält i Odoo: Den Fullständiga Guiden
Dasolo
| Inga kommentarer ännu

Varje företag är unikt. Ditt team spårar information som ingen standardprogramvara förutser, och det är precis där anpassade fält i Odoo kommer in.


Istället för att tvinga dina arbetsflöden att passa en stel datamodell, låter Odoo dig lägga till nya fält till nästan vilken post som helst, oavsett om det är en kund, en försäljningsorder, en produkt eller en faktura. Du bestämmer vilken data som ska fångas, och Odoo lagrar den tillsammans med allt annat.


Denna guide täcker allt du behöver veta: vad anpassade fält är, hur de fungerar under huven, hur man skapar dem med eller utan kod, och hur man använder dem på ett sätt som håller din Odoo-instans ren och underhållbar.

Vad är ett anpassat fält i Odoo


Ett anpassat fält är ett databasfält som du lägger till en befintlig Odoo-modell, utöver vad som kommer som standard. Det lagrar en specifik bit information kopplad till en post, precis som ett inbyggt fält skulle.


I Odoo identifieras anpassade fält med prefixet x_. Fält som skapats genom Odoo Studio använder namn som x_studio_priority_level, medan fält som lagts till programmässigt kan använda ett prefix som är specifikt för ditt projekt, såsom x_dasolo_cost_center.


Från användargränssnittet ser ett anpassat fält ut och beter sig exakt som vilket standardfält som helst. Det kan visas i formulär, listvyer, filter, gruppera-alternativ och rapporter. Användare som inte känner till den tekniska sidan kommer aldrig att märka någon skillnad.


Tillgängliga fälttyper

Odoo stöder ett brett utbud av fälttyper för anpassade fält, som täcker de flesta databehov:

  • Text (Char): Kort text, som en referenskod eller en etikett
  • Lång text: Flera rader med fri text för anteckningar eller beskrivningar
  • Heltal: Hela nummer, användbara för räkningar eller poäng
  • Decimal (Float): Nummer med decimaler, för mått eller priser
  • Monetär: Valuta-anpassad summa, kopplad till ett valutafält
  • Boolean: En sann/falsk kryssruta
  • Datum / Datum & Tid: Kalenderdatum eller tidsstämpel
  • Val: En fast rullgardinslista med alternativ
  • Many2one: En länk till en enda post i en annan modell
  • One2many: En lista över relaterade poster från en annan modell
  • Many2many: Flera poster kopplade från en annan modell
  • Binary: Filbilaga
  • HTML: Rikt textinnehåll

Att välja rätt fälttyp från början sparar mycket besvär senare. Ett urvalsfält är nästan alltid bättre än ett fält för fri text när uppsättningen av möjliga värden är känd i förväg.

Hur fältet fungerar


Odoo är byggt på ett ramverk som kallas Odoo ORM (Object-Relational Mapping). Varje formulär, lista och post du ser i gränssnittet stöds av en Python-modell som mappas till en databas-tabell. När du lägger till ett anpassat fält registrerar Odoo det i ORM och skapar automatiskt den motsvarande kolumnen i PostgreSQL.


Detta är vad som gör Odoo datamodell flexibel: du patchar inte källkoden. Du utökar modellen genom ett metadata-lager som lagras i ir.model.fields-tabellen. Odoo läser den tabellen vid uppstart och bygger fälten dynamiskt.


Fält definierade i kod vs. fält definierade i databasen

I standard Odoo-utveckling definieras fält direkt i Python-modellklasser med hjälp av Odoo-ramverket. En typisk fältdefinition ser ut så här:


from odoo import models, fields

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

    cost_center = fields.Char(string='Kostnadsställe')

Anpassade fält som skapats via användargränssnittet eller API följer en annan väg: de lagras med state = 'manual' i ir.model.fields och laddas vid körning. Båda metoderna producerar en verklig databas-kolumn och beter sig identiskt ur användarens perspektiv.


Relationella fält och ömsesidighet

När du skapar ett Many2one anpassat fält som pekar på en annan modell, förväntar sig Odoo ett matchande One2many fält på den andra sidan. Detta är inte bara en konvention: det är hur Odoo ORM navigerar relationer mellan poster.


Till exempel, om du lägger till ett x_project_id (Many2one till project.project) på en försäljningsorder, bör du också lägga till x_sale_order_ids (One2many tillbaka till sale.order) på projektmodellen. Utan detta är navigering från projektet till dess länkade beställningar inte möjlig genom det standardgränssnittet.


Beräknade Anpassade Fält

Odoo beräknade fält är fält vars värde beräknas automatiskt baserat på andra fält, snarare än att anges av användaren. I tekniska anpassningar definierar du en Python-metod och kopplar den till fältet med hjälp av compute-parametern. Dessa fält är skrivskyddade och uppdateras när deras beroenden ändras.


Beräknade fält är kraftfulla men kräver kod. De kan för närvarande inte skapas genom Odoo Studio utan utvecklarläge och viss Python-kunskap.

Affärsanvändningsfall


Anpassade fält förekommer i nästan varje Odoo-projekt vi arbetar med på Dasolo. Här är fem vanliga scenarier från verkliga affärsarbetsflöden.

1. CRM: Kvalificera Leads Mer Precist

Standard Odoo-leads fångar kontaktuppgifter och pipeline-steg, men många säljteam behöver mer. Ett Valfält för "Kundindustri" eller en Many2one som länkar till en intern "Marknadssegment"-modell gör att säljrepresentanter kan kvalificera leads snabbare och möjliggör för ledningen att rapportera om pipeline efter segment.


2. Försäljning: Spåra Interna Projektkoder

Företag som fakturerar kunder per projekt behöver ofta koppla en intern projektkod eller budgetreferens till varje offert eller försäljningsorder. Ett enkelt Char-fält kallat "Projektkod" på sale.order gör detta möjligt utan en fullständig projektledningsintegration. Fältet visas på tryckta dokument och kan användas för att filtrera och gruppera beställningar i rapporter.


3. Lager: Produkt-specifika Attribut

Utöver Odoos standardproduktattribut behöver företag ibland spåra tekniska specifikationer som är unika för deras bransch. En tillverkare kan lägga till fält för "Garantiperiod (månader)" (Heltal), "Certifieringsstandard" (Val) eller "Ursprungsland" (Many2one till res.country). Dessa fält integreras naturligt med produktformuläret och är tillgängliga i lager rapporter.


4. Redovisning: Budget och Kostnadsställe Allokering

Finansavdelningar behöver ofta märka fakturor eller bokföringsposter med ett kostnadsställe eller budgetlinje. Ett Many2one-fältaccount.move som pekar på en anpassad "Kostnadsställe"-modell möjliggör detaljerad kostnadsallokering utan att modifiera Odoos analytiska redovisningsinställningar. Filter, pivottabeller och exporter respekterar alla fältet omedelbart efter skapandet.


5. HR: Anpassade Onboardingdata

HR-avdelningar samlar ofta in data under onboarding som inte passar in i standardanställningsfält: kontrakttyper specifika för ett land, interna kompetenskategorier eller referenser för fordonsfördelning. Anpassade fält på hr.employee håller denna information inom Odoo istället för i ett separat kalkylblad, vilket gör den sökbar och rapporterbar.

Skapa eller anpassa fältet


Det finns två huvudsakliga sätt att skapa anpassade fält i Odoo. Det rätta valet beror på dina tekniska resurser och hur komplex fältet behöver vara.


Alternativ 1: Odoo Studio (Ingen kod)

Odoo Studio-fält är den snabbaste vägen för affärsanvändare. Med Studio aktiverat kan du lägga till ett nytt fält till vilken vy som helst med några klick:

  1. Öppna appen och registrera typ där du vill ha fältet (till exempel, ett försäljningsorderformulär)
  2. Klicka på pennikonen för att gå in i Studio redigeringsläge
  3. Dra ett fälttyp från vänsterpanelen till formuläret
  4. Ställ in fältets etikett, tekniska namn och eventuella ytterligare egenskaper
  5. Spara och avsluta Studio

Studio skapar fältet i ir.model.fields med x_studio_ prefixet och lägger det direkt till vyn. Ingen distribution eller serveromstart behövs. Detta är den rekommenderade metoden för enkla fält som inte kräver anpassad logik.


Alternativ 2: Teknisk anpassning via API

För team som arbetar med Odoo-anpassning projekt kan fält skapas programmässigt med hjälp av XML-RPC API eller genom att skriva en Python-modul. Detta är rätt väg när du behöver beräknade fält, komplexa domänfilter eller fält som bör vara en del av en versionskontrollerad kodbas.


Med API:et ser skapandet av ett anpassat urvalsfält på en försäljningsorder ut så här:


# Hitta modell-ID för sale.order
model = models.execute_kw(
    db, uid, api_key,
    'ir.model', 'search_read',
    [['model', '=', 'sale.order']],
    {'fields': ['id', 'name']}
)[0]

# Skapa det anpassade fältet
field_id = models.execute_kw(
    db, uid, api_key,
    'ir.model.fields', 'create',
    [{
        'name': 'x_project_type',
        'field_description': 'Projekt Typ',
        'model_id': model['id'],
        'ttype': 'selection',
        'selection': [('internal', 'Intern'), ('client', 'Kund'), ('rd', 'F&U')],
        'state': 'manual',
    }]
)

Detta är en del av den standard Odoo utvecklare guide arbetsflödet för att lägga till fält utan att modifiera källfiler. Det är särskilt användbart för fjärrkonfigurationer och automatiserade distributionsskript.


För en fullständig Python-modulansats definieras fält i en modellklass och laddas via den standard Odoo modulmekanismen. Detta är det mest underhållbara alternativet för fält som kommer att bestå över uppgraderingar och behöver spåras i versionskontroll.


Lägga till fältet i en vy

Att skapa ett fält gör det inte automatiskt synligt i gränssnittet. Du måste också lägga till det i den relevanta formulär- eller listvyn. Med Studio görs detta samtidigt som fältet skapas. Med teknisk anpassning modifierar du antingen vy-XML direkt eller skapar en ärvd vy som injicerar fältet på rätt plats.


Bästa praxis


Anpassade fält är lätta att skapa, men en dåligt planerad fältarkitektur skapar problem som är svåra att åtgärda senare. Dessa är de metoder som håller saker rena.


Använd urvalsfält framför fri text när det är möjligt

Om uppsättningen av möjliga värden är känd i förväg, använd alltid ett urvalsfält istället för ett Char-fält. Fri text leder till inkonsekventa poster ("Kund", "kund", "KUND", "Kl.") som bryter filter och rapporter. En rullgardinsmeny säkerställer konsekvens utan extra kostnad.


Namnfält Tydligt och Konsekvent

Det tekniska namnet (x_project_type) bör återspegla innehållet, inte positionen på formuläret. Ett fält som heter x_field_1 är omöjligt att underhålla sex månader senare. Använd en konsekvent namngivningskonvention och dokumentera vad varje fält är till för.


Översträck Inte Inhemska Modeller

Att lägga till tio anpassade fält till sale.order är vanligtvis ett tecken på att en anpassad modell skulle fungera bättre. Om en grupp fält hör ihop och representerar en ny enhet i din verksamhet (ett projekt, ett kontrakt, en certifiering), överväg att skapa en anpassad modell och koppla den med ett Many2one-fält istället.


Testa Alltid på en Staging-databas

Innan du lägger till fält i en produktionsinstans, testa på en kopia av databasen. Fält skapande är mestadels säkert, men att lägga till ett fält i fel modell, eller med fel typ, kan kräva manuell städning. En staging-miljö fångar dessa problem tidigt.


Dokumentera Dina Anpassade Fält

Håll en register över varje anpassat fält du lägger till: modellen, det tekniska namnet, syftet och vem som begärde det. Odoo-implementationer ackumulerar fält över tid, och utan dokumentation blir det omöjligt att veta vilka som fortfarande är i bruk och vilka som kan tas bort.


Använd Rätt Verktyg för Beräknad Logik

Om ett fälts värde beror på andra fält, använd ett beräknat fält istället för att be användare fylla i det manuellt. Detta undviker inkonsekvenser och minskar fel vid datainmatning. Beräknade fält är en del av kärnfunktionaliteten för Odoo Python-fält och är väl dokumenterade i den officiella Odoo tekniska handledningen.

Vanliga fallgropar


Även erfarna team stöter på samma problem med anpassade fält. Här är de som dyker upp oftast.


Glömma One2many När Man Skapar en Many2one

Detta är det vanligaste tekniska misstaget. Om du lägger till ett Many2one-fält på modell A som pekar på modell B, och du inte skapar motsvarande One2many på modell B, så bryts navigeringen från B till A. Användare kan inte se relaterade poster från den andra sidan av relationen. Skapa alltid båda fälten tillsammans.


Ta bort ett fält som innehåller data

Att ta bort ett anpassat fält tar permanent bort databasens kolumn och all data som den innehåller. Det finns ingen ångra. Om det finns någon chans att fältet eller dess data kommer att behövas i framtiden, arkivera eller dölja fältet istället för att ta bort det.


Skapa fält direkt i produktion

Att göra ändringar direkt på en live produktionsdatabas, utan att testa på staging först, är en risk även för enkla fältadditioner. Om något går fel med vykonfigurationen får användarna felmeddelanden. Validera alltid först i en testmiljö.


Namnkollisioner med standardfält

Odoo kommer att avvisa ett fältnamn som redan finns på modellen, men det är lätt att av misstag skapa ett fält som skuggar ett fält från en modul som du installerar senare. Att använda ett företags-specifikt prefix (som x_acme_) för dina anpassade fält minskar denna risk avsevärt.


Lägga till ett fält i vyn utan att tänka på UX

Bara för att ett fält kan läggas till i ett formulär betyder det inte att det ska vara synligt som standard. Röriga formulär saktar ner användarna. Om ett fält endast är relevant i specifika sammanhang, placera det i en separat flik eller gör det villkorligt synligt med hjälp av domänbaserade osynlighetsregler.


Blanda Studio-fält och tekniska fält inkonsekvent

När ett projekt kombinerar Studio-anpassning och kodbaserad anpassning kan du få fält som har överlappande syften eller konfliktande namn. Kom överens om en strategi i början av projektet: antingen använd Studio för alla no-code-fält och kod för komplex logik, eller använd kod för allt. Att blanda båda utan en tydlig plan skapar underhållshuvudvärk.

Slutsats


Anpassade fält är ett av de enklaste och mest effektiva sätten att anpassa Odoo till ditt företag. De kräver inga källkodmodifieringar, integreras naturligt med resten av plattformen och ger användarna den exakta datainsamling de behöver utan omvägar.

Nyckeln är att planera innan du bygger. Välj rätt fälttyp, namnge saker tydligt, respektera konventioner för relationella fält och dokumentera vad du skapar. En väl utformad fältarkitektur gör din Odoo-instans lättare att underhålla och lättare att utveckla i takt med att ditt företag växer.


Oavsett om du använder Odoo Studio för snabba no-code-fält eller skriver Python-moduler som en del av ett bredare Odoo-anpassnings projekt, är de underliggande principerna desamma: matcha fältet med datan, håll modellen ren och testa alltid innan du distribuerar till produktion.

På Dasolo hjälper vi företag att implementera, anpassa och optimera Odoo för att passa deras verkliga arbetsflöden. Oavsett om du behöver några anpassade fält till din befintliga installation eller en fullständig anpassad modul byggd från grunden, är vårt team här för att hjälpa.

Kontakta oss om du behöver vägledning kring din Odoo-implementering. Vi hjälper gärna till att granska din nuvarande installation och föreslå den renaste vägen framåt.

Anpassade Fält i Odoo: Den Fullständiga Guiden
Dasolo 6 mars 2026
Dela detta inlägg
Logga in att lämna en kommentar