Introduktion
Om du någon gång laddat upp en produktbild, lagt in företagets logotyp eller sparat en medarbetares profilbild i Odoo så har du använt ett bildfält. Det är ett av de mest synliga fälttyperna i systemet och dyker upp i fler sammanhang än många förväntar sig.
För slutanvändaren är det ofta enkelt: klicka, ladda upp och bilden syns. För konsulter och utvecklare är bilden bara toppen på isberget — bakom finns särskild lagring, automatisk bildbearbetning och detaljer kring hur bilder exponeras som är bra att känna till innan ni börjar lägga till egna bildfält.
Den här guiden förklarar vad som faktiskt sparas när du lägger in en bild, hur Odoo hanterar storlekar och åtkomst, hur du lägger till fältet via Studio eller i Python, samt konkreta exempel från verkliga arbetsflöden.
Vad är ett bildfält i Odoo?
I Odoos ORM finns en särskild fälttyp för bilder: fields.Image (införd i Odoo 13). Före det byggde utvecklare bildstöd med fields.Binary tillsammans med ett bild-widget. Idag tar Image-fälten hand om både lagring och storleksanpassning utan extra byggstenar.
Bakom kulisserna sparas bildinnehållet som binärdata i base64-format. I databasen hamnar det i allmänhet inte direkt i tabellen utan som en bilaga i ir.attachment, vilket håller huvudtabellerna lättare och gör att Odoo kan leverera bilder via särskilda URL:er effektivt.
Hur det ser ut i gränssnittet
I ett formulär visas ett bildfält som en klickbar förhandsvisning där användaren kan ladda upp en fil (ibland går det även att klistra in en bild-URL). En tydlig thumbnail på formuläret gör det enkelt att snabbt se om rätt bild är kopplad till posten.
I listvyer syns bilder sällan eftersom thumbnails för många rader kan göra listor långsamma. Däremot är bildfält vanliga i kanban-vyer, där små bildikoner i kort ger snabb visuell igenkänning — exempelvis produktfoton eller kontaktbilder.
Bildfält kontra binärfält i Odoo
Skillnaden är viktig: fields.Binary kan lagra vilken filtyp som helst (pdf, zip, excel osv.). fields.Image är avsett för bildfiler och innehåller logik för automatisk storleksanpassning, validering och korrekt visning. Sparar du dokument — använd Binary. Sparar du foton eller logotyper — använd Image.
Hur fältet fungerar
När en användare laddar upp en bild till ett Image-fält tar Odoo inte bara emot filen som den är; systemet bearbetar bilden först.
Automatisk storleksanpassning
Vid deklaration av fields.Image kan du ange max_width och max_height. Om uppladdad bild överskrider dessa värden så skalas den ner automatiskt med bibehållen bildproportion — det sker i sparmomentet och är osynligt för användaren.
Standardgränsen för många Image-fält är 1920 pixlar längsta sidan, därför ser du ofta fält med namnet image_1920 på standardmodeller som product.template och res.partner.
Olika bildstorlekar
På standardmodeller förekommer ofta en serie relaterade bildfält: image_1920, image_1024, image_512, image_256 och image_128. Det är separata fields.Image som pekar tillbaka mot huvudbilden och är konfigurerade med olika maxmått.
Den här mönstret låter systemet leverera rätt upplösning beroende på sammanhang: listor hämtar små thumbnails för snabb laddning, produktsidor hämtar fullstor bild för bättre detaljvisning. För egna modeller avgör du om du behöver flera varianter beroende på hur bilderna visas.
Lagring som bilagor
Image-fält sparas i praktiken som bifogade filer i ir.attachment. Själva posten i modellen refererar till bilagan istället för att innehålla hela binärblocket i huvudsakstabellen.
Det håller databastabellerna smalare och ger förutsägbara URL:er för bilder, t.ex. /web/image/product.template/42/image_1920, vilket används på webbplatser, i e-postmallar och i API-svar.
Åtkomstkontroll
Bilder är skyddade av samma rättigheter som själva posten. Om en användare saknar läsrätt till en produkt så kan hen inte heller hämta dess bild — det styrs av Odoos säkerhetslager och är viktigt att tänka på när man bygger publika sidor eller kundportaler.
Affärsscenarion där bildfält används
Här följer några vanliga affärssituationer där Image-fält är centrala.
1. Produktkatalog (Försäljning och Lager)
Produktbilder är kanske den vanligaste användningen. Varje produktmall har ofta ett image_1920-fält och bilderna visas i webbutik, på orderbekräftelser, i kassa-gränssnitt och i plocklistor på mobila enheter.
Företag med stora sortiment brukar bulk-ladda bilder via API istället för manuellt — Image-fält accepterar base64-kodad binärdata vilket gör massinläsning via XML-RPC eller JSON-RPC enkel att automatisera.
2. Kund- och leverantörslogotyper (CRM och Inköp)
res.partner har bildfält för företagslogotyper och kontaktbilder. Logotyper syns i partnerformuläret, i chatter och i CRM-kanban, och hjälper säljteam att snabbt känna igen stora kunder i listor.
3. Medarbetarfoton (HR)
hr.employee har ett fotofält som används i personalregister, på vissa löneavier och i diskussionsmodulen intill meddelanden. HR-avdelningar lägger ofta in bilder i bulk vid onboardingar.
4. Maskiner och tillgångar (Underhåll)
Underhållsmodulen låter tekniker bifoga foton på utrustning. Ett foto på maskinen i underhållsordern minskar risken att tekniker arbetar på fel enhet ute i fält.
5. Inspektions- och kvalitetsformulär
Många företag bygger egna modeller för kvalitetskontroller eller leveransbekräftelser där man bifogar fotografisk bevisning. Bildfält fungerar bra i både Studio och i kod för att fältpersonal ska kunna ladda upp bilder direkt i posten.
Skapa eller anpassa ett bildfält
Du kan lägga till ett Image-fält antingen utan kod via Odoo Studio eller genom att definiera fältet i Python för mer kontroll.
Använda Odoo Studio
Studio är Odoos inbyggda verktyg för no-code-anpassningar. Aktivera Studio, öppna aktuell app och dra helt enkelt in ett bildfält på formuläret där du vill ha det.
Studio frågar efter en etikett och skapar fältet i modellen åt dig automatiskt — en smidig lösning för funktionella konsulter och superanvändare som inte vill involvera utvecklare.
Studio-fält får vanligen prefixet x_studio_, till exempel x_studio_site_photo, och fungerar tekniskt på samma sätt som standard Image-fält.
Använda Python (utveckling)
För tekniska lösningar definierar du Image-fält i modellens Python-fil. Det ger full kontroll över parametrar som maxstorlek, lagringsbeteende och relaterade thumbnails.
from odoo import models, fields
class SiteInspection(models.Model):
_name = 'site.inspection'
_description = 'Site Inspection'
name = fields.Char(string='Reference', required=True)
photo = fields.Image(
string='Site Photo',
max_width=1920,
max_height=1920,
)
photo_128 = fields.Image(
related='photo',
max_width=128,
max_height=128,
store=True,
string='Thumbnail',
)
I exemplet sätter max_width och max_height gränsen till 1920 pixlar. Fältet photo_128 är en relaterad och lagrad thumbnail som används i vyer där en mindre bild räcker — standardmönstret för att hantera flera bildstorlekar i Odoo.
Lägga till fältet i en vy
För att bilden ska synas i formuläret måste fältet infogas i vydefinitionen, där du ofta anger bild-widgeten för korrekt rendering:
<field name="photo" widget="image" class="oe_avatar"/>
CSS-klassen oe_avatar visar bilden som en cirkulär avatar i formulärets övre hörn i enlighet med Odoos standardstil. Vill du placera bilden inline kan du utelämna klassen.
Rekommenderade arbetssätt
Praktiska rekommendationer för arbete med bildfält
Sätt rimliga storleksgränser
1920 pixlar är ofta ett bra standardvärde. Öka bara om ni verkligen behöver högupplöst material för tryck eller liknande — större bilder betyder större bilagor, större databas och långsammare sidladdningar.
Skapa en thumbnail-variant för listor och kanban
Visa alltid en liten variant (128–256 px) i listor eller kanban. Att hämta en 128 px-thumbnail är mycket snabbare än att ladda fullstor bild för varje rad.
Använd API för bulkuppladdning
Vid hundratals eller tusentals bilder — automatisera via XML-RPC/JSON-RPC och skriv base64-kodad bilddata direkt till fältet. Det är både snabbare och mer tillförlitligt än manuell uppladdning.
Komprimera före uppladdning
Odoo skalar ner dimensioner men komprimerar inte alltid aggressivt. En stor JPEG som skalats till 1920 px kan fortfarande bli flera hundra kilobyte — förkomprimera för att hålla lagringskostnader och sidladdning nere.
Undvik fullstora bilder i ofta frågade listvyer
Visa inte ett Image-fält i en kolumn där många rader renderas samtidigt — det tvingar fram hämtning av binärdata för varje rad och gör vyn trög. Håll stora bilder till formuläret.
Vanliga fallgropar
De vanligaste misstagen vi ser
Förväxla Binary och Image
Ett Binary-fält utan rätt widget blir en nedladdningsknapp istället för en bildförhandsvisning. Om du vill visa en bild måste du använda fields.Image eller en Binary med widget="image" i vyn — annars blir beteendet oväntat.
Att inte planera för storleksvarianter i tid
Att först lägga till bara ett stort bildfält är enkelt men om du senare behöver thumbnails kan det kräva migration i en custom-modul. Planera varianter från början om du vet att bilder kommer visas i flera sammanhang.
Lagra bilder direkt i tabellen istället för som bilagor
I äldre eller felkonfigurerade installationer kan binärdata hamna direkt i huvudtabellen, vilket blåser upp tabellstorleken och gör frågning långsammare. Säkerställ att er installation använder bilagor eller extern lagring (t.ex. S3) för attachments.
Använda bildfält som dokumentslagring
Att lagra skannade flersidiga dokument i ett bildfält är tekniskt möjligt men inte lämpligt. För dokumenthantering är Odoo Documents eller Binary-fält med filwidget bättre alternativ — bildfält är för foton och logotyper.
Att glömma åtkomstregler på publika sidor
Om en bild URL exponeras publikt men posten inte är åtkomlig för anonym användning, kommer bilden att ge 404. Kontrollera alltid att rätt behörigheter finns när ni visar bilder på webb eller i kundportaler.
Sammanfattning
Bildfältet är enkelt att använda i vardagen, men innehåller tillräckligt många tekniska detaljer att det kan ställa till problem om man inte planerar. Förståelse för resizing, bilagelagring och mönstret med flera storlekar sparar mycket tid.
För slutanvändare räcker det att veta att bilder lagras säkert och nås via förutsägbara URL:er. För utvecklare är kombinationen av fields.Image och relaterade thumbnails standardmönstret att bemästra tidigt i ett projekt.
Oavsett om ni lägger in produktbilder i katalogen, bifogar site inspection-foton i en custom-modell eller bygger en kundportal med logotyper, så ger Image-fältet ett enkelt och integrerat sätt att hantera visuella data i Odoo.
Behöver du hjälp med er Odoo-implementation?
På Dasolo hjälper vi företag med implementationer, anpassningar och optimeringar av Odoo över moduler och versioner. Vi arbetar praktiskt tillsammans med era team — från fältdesign och custom modules till datamigrering från äldre system — för att få Odoo att fungera i enlighet med ert sätt att arbeta.
Har ni frågor om er Odoo-miljö eller vill utforska möjligheter med plattformen, kontakta ossså hjälper vi gärna till.