Skip to Content

Binary Field i Odoo: Komplett Guide for Utviklere

En lettfattelig veileder til Binary-feltet i Odoo: hvordan du lagrer filer og dokumenter, håndterer vedlegg og tilpasser tekniske løsninger.
6. mars 2026 etter
Binary Field i Odoo: Komplett Guide for Utviklere
Dasolo
| No comments yet

Innledning


Binary-feltet er kanskje ikke synlig eller glamorøst, men det er overalt i en virkelig Odoo-installasjon. Når en bruker laster opp en signert kontrakt, legger ved et produktark eller lagrer en bedriftslogo på en post, er det et Binary-felt som sørger for lagring og tilgang i bakgrunnen. Kunnskap om hvordan innholdet lagres, hvor filene plasseres, og når du bør velge et annet felttype er avgjørende når man bygger skjemaer eller utvider modeller.


Denne veiledningen forklarer hva Binary-feltet holder av data, hvordan vedleggsmodusen påvirker lagring og ytelse, hvordan du oppretter og tilpasser feltet via Odoo Studio eller i Python, og viser konkrete bruksområder i CRM, HR, lager og økonomi.

Hva er Binary-feltet i Odoo


I Odoo sitt ORM representeres binære filer av fields.Binary — feltet lagrer rå binærdata: dokumenter, bilder eller andre filer brukeren legger ved på en post. I skjema-visningen presenteres dette vanligvis som en opplastingsknapp, og samme kontroll gir mulighet til å laste ned filen med ett klikk.


Det viktigste tekniske poenget handler om hvor filinnholdet faktisk havner. I moderne Odoo-versjoner brukes normalt attachment-modus: filene ender opp som oppføringer i ir.attachment og i serverens fillager, mens kolonnen i modellen bare inneholder en referanse til vedlegget. Dette holder hovedtabellene lette og lar Odoo håndtere filene mer effektivt.


I Odoo Studio finner du Binary-feltet under navnet File i feltvelgeren. Det rulles ut som en enkel opplasting-/nedlastingskontroll i skjemaer. For bilder finnes også fields.Image som håndterer automatisk skalering og viser forhåndsvisninger — nyttig når du vil ha bedre brukeropplevelse for visuelt innhold.


Slik kan et Binary-felt defineres i en Python-modell:


from odoo import fields, models

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

    x_signed_contract = fields.Binary(
        string='Signed Contract',
        attachment=True,
    )
    x_signed_contract_filename = fields.Char(
        string='Signed Contract Filename',
    )

Merk den tilhørende x_signed_contract_filename Char-feltet. Å legge ved et eget _filename-felt er en standardmønster i Odoo-utvikling: det husker og viser originalt filnavn i grensesnittet. Uten dette kan nedlastede filer få et generisk navn.

Hvordan feltet fungerer


Når du definerer et Binary-felt i modellen, håndterer Odoo rammeverket opprettelsen av kolonnen ved installasjon eller oppgradering av modulen — du trenger vanligvis ingen manuelle SQL-endringer.


Lagringsmoduser

attachment-parameteren på et Binary-felt bestemmer hvor filbytes lagres:


  • attachment=True (anbefalt): Filinnhold lagres i ir.attachment og lenkes til posten via modellnavn og post-ID. Modellens kolonne inneholder kun en referanse. Dette holder modelltabellene små og utnytter Odoo sitt filsystem.
  • attachment=False: Rå base64-kodet data lagres direkte i modellens databasekolonne. Det kan få tabeller til å vokse raskt og gjøre spørringer tregere. Unngå denne modusen for alt som er mer enn en liten miniatyrbilde.

Dataformat

Binary-feltene håndterer data som base64-kodede bytes. Ved lesing gjennom ORM eller XML-RPC får du en base64-streng; ved skriving må du sende en base64-streng.


I praksis betyr det at du må kode før skriving og dekode etter lesing:


import base64

# Skrive en fil til et Binary-felt
with open('document.pdf', 'rb') as f:
    encoded = base64.b64encode(f.read()).decode('utf-8')
record.write({'x_signed_contract': encoded})

# Lese en fil fra et Binary-felt
raw_bytes = base64.b64decode(record.x_signed_contract)

Viktige feltattributter

Her er de mest relevante attributtene du kan sette på et Binary-felt i Odoo:


  • attachment: Boolean. Bestemmer om innholdet lagres i ir.attachment (True) eller direkte i kolonnen (False). Standard i nyere versjoner er True.
  • string: Tekstetikett som vises i brukergrensesnittet.
  • required: Gjør feltet obligatorisk før lagring.
  • compute: Kobler en Python-metode for å generere feltverdien dynamisk, for eksempel å lage en PDF ved behov.
  • store: I kombinasjon med compute lagres den beregnede verdien i databasen.
  • groups: Begrens feltets synlighet til bestemte brukergrupper — viktig for sensitive dokumenter.
  • copy: Styrer om verdien kopieres ved duplisering av poster. Standard varierer med attachment-innstilling og Odoo-versjon.

fields.Image-subklassen

fields.Image er en spesialisert variant av fields.Binary (fra Odoo 13) som håndterer automatisk skalering til maksimal dimensjon, tilbyr en egen forhåndsvisningsstørrelse og viser en ekte miniatyr i skjemaer. Bruk fields.Image for produktbilder, profilbilder eller logoer for å unngå store opplastinger og få bedre brukeropplevelse.


Slik vises feltet i visninger

I skjema-visninger vises Binary-feltet som en opplastings-/nedlastingsknapp. For bilder anbefales image-widgeten for å få miniatyrvisning. I listevisninger viser man vanligvis ikke fullt binærinnhold; i stedet bruker man et ikon eller en boolsk indikator for å signalisere at en fil er tilknyttet uten å laste ned store datamengder.

Forretningsscenarier


Binary-feltet brukes i en rekke moduler i praktiske arbeidsflyter. Under følger fem konkrete eksempler fra vanlige forretningsområder.


CRM: Lagre signerte avtaler eller NDA på kunde

Salgsteam vil ofte ha signerte avtaler eller NDA-er direkte knyttet til kunde- eller lead-poster. Et Binary-felt på res.partner eller crm.lead gir rask tilgang til kontrakter uten å måtte bytte verktøy, og holder dokumentasjonen der selgere intuitivt forventer å finne den.


HR: Lagring av medarbeiderdokumenter

HR trenger å arkivere ID-dokumenter, arbeidstillatelser, signerte kontrakter og kursbevis. Et Binary-felt på hr.employee lagrer disse filene innenfor Odoos tilgangskontroll, og ved å bruke groups kan du sikre at kun HR-personell får se sensitive filer.


Lager: Produktskjemaer og sikkerhetsdatablader

For tekniske varer er PDF-spesifikasjoner, sikkerhetsdatablader og sertifikater viktige. Et Binary-felt på product.template gir innkjøp og lagerpersonell enkel tilgang til korrekt dokumentasjon direkte fra produktkortet — en hyppig etterspurt tilpasning i produksjon og distribusjon.


Salg: Firmastempel eller signaturbilde

Noen bedrifter trenger et digitalt stempel eller signatur på utskrevne tilbud og ordrebekreftelser. Et fields.Image-felt på res.company kan lagre dette visuelt elementet, som deretter settes inn automatisk i QWeb-rapporter, noe som sparer tid og reduserer manuell håndtering.


Regnskap: Skannet kvittering på utleggsoppføringer

I utleggshåndtering er det vanlig å legge ved en skannet kvittering som dokumentasjon. Enten man bruker Odoos standardfunksjon eller en skreddersydd modell, gir et Binary-felt en enkel måte å knytte kvitteringer og fakturaer til poster og inkludere dem i godkjenningsflyten.

Opprette eller tilpasse Binary-feltet


Tre måter å legge til et Binary-felt på


Bruk Odoo Studio (ingen kode)

Odoo Studio er lavkodeverktøyet som følger med. Slik legger du til et Binary-felt uten utvikling:

  1. Åpne Odoo Studio fra hovedmenyen.
  2. Gå til skjemaet der feltet skal ligge.
  3. Dra et File-felt fra feltvelgeren og slipp det i skjemaet.
  4. Angi etikett og eventuelle synlighetsregler i egenskapspanelet.
  5. Lagre og lukk Studio.

Studio oppretter feltet med et x_studio_-prefiks og bruker som regel attachment-modus automatisk. Dette er en brukervennlig måte for forretningsbrukere å legge til filopplasting uten utviklerstøtte.


Ved hjelp av Python i en egendefinert modul

For sporbarhet og distribusjon over flere miljøer er det beste å definere Binary-felt i Python i en modul — dette er anbefalt praksis for seriøse Odoo-tilpasninger:


from odoo import fields, models

class HrEmployee(models.Model):
    _inherit = 'hr.employee'

    x_id_document = fields.Binary(
        string='ID Document',
        attachment=True,
        groups='hr.group_hr_user',
    )
    x_id_document_filename = fields.Char(
        string='ID Document Filename',
    )

Etter å ha lagt feltet i modellen inkluderer du det i skjemaets XML med binary-widget og filename-attributt som peker til det komplementære Char-feltet. Odoo tar seg av databasekolonnen ved installasjon/oppgradering, og metoden fungerer både på Odoo.sh og on-premise.


Via XML-RPC API

Hvis du oppretter felt programmatisk fra en ekstern script eller deploy-notebook, kan felt opprettes via XML-RPC API:


field_id = models.execute_kw(
    ODOO_DB, uid, ODOO_API_KEY,
    'ir.model.fields', 'create',
    [{
        'name': 'x_custom_document',
        'field_description': 'Custom Document',
        'model_id': model_id,
        'ttype': 'binary',
        'state': 'manual',
    }]
)

Verdien state: 'manual' forteller Odoo at feltet er laget manuelt og ikke av en modul. Felt opprettet via API bruker i nyere versjoner som regel attachment-modus. Denne fremgangsmåten benyttes i automatiserte konfigurasjonsskript og fjern-deploy-workflows.

Beste praksis


1. Bruk alltid attachment=True

Med mindre du har en helt spesiell grunn, bør filinnhold lagres i ir.attachment. Det holder modelltabellene små og unngår ytelsesproblemer. I praksis er dette standard i nyere Odoo-versjoner — for filer som er større enn små miniatyrbilder er attachment-modus et krav.


2. Kombiner Binary-felt med et filnavn-Char-felt

Alltid legg til et _filename Char-felt ved siden av Binary-feltet. Uten det kan nedlastede filer få et generisk navn som 'download'. Denne enkle linjen i modellen forbedrer brukeropplevelsen merkbart.


3. Bruk fields.Image for bilder

For produktbilder, profilbilder og logoer — bruk fields.Image i stedet for et generisk Binary-felt. Image-feltet setter grenser for opplastningsstørrelse, lager et miniatyrbilde og gir bedre ytelse og brukeropplevelse.


4. Begrens tilgang med groups-parameteren

Sensitive dokumenter som personalmapper, kontrakter eller økonomiske filer bør få tilgangsbegrensning via groups. Dette er viktig både for personvern og for revisjonsspor i regulerte bransjer.


5. Håndter base64-koding korrekt i kode

Når du leser eller skriver binære felter i kode, må du eksplisitt håndtere base64. Bruk base64.b64encode(file_bytes).decode('utf-8') før skriving og base64.b64decode(field_value) ved lesing. Mange feil i integrasjoner oppstår fordi dette trinnet blir oversett.

Vanlige fallgruver


Å sette attachment=False for store filer

Å lagre store filer direkte i en databasekolonne kan blåse opp PostgreSQL-tabeller raskt. Noen titalls PDF-er med attachment=False kan legge hundrevis av megabyte til en tabell og gjøre alle spørringer på modellen tregere. Å rette dette krever ofte migrering og spesialskrevet skript.


Glemme følgelig filnavnsfeltet

Uten et companion-felt for filnavn ender brukere ofte opp med en generisk filnavn ved nedlasting. Dette virker uferdig og er lett å unngå ved å legge til et Char-felt for filnavnet.


Forvirring mellom Binary og Image

Å bruke et vanlig Binary-felt for bilder fratar deg automatisk skalering og miniatyrfunksjoner. Store bilder kan føre til tregere skjemaer og unødvendig lagringsbruk. Omvendt vil fields.Image feilaktig brukt for PDF-er føre til behandling som bilde og feilmeldinger. Velg feltet etter forventet filtype.


Å inkludere Binary-felt i listevisninger

Hvis du viser et Binary-felt direkte i en listevisning, kan Odoo hente full filinnhold for hver rad. For en liste med femti poster kan dette bety megabyte med data ved hver sidevisning. Bruk heller et beregnet boolean-felt eller et ikon for å indikere tilknyttet fil i lister.


Ikke sjekke for False før behandling i kode

Når et Binary-felt ikke har verdi returnerer det False i Python, ikke en tom streng. Hvis du prøver å dekode uten å sjekke for False først, får du en TypeError. Alltid gjør en sjekk: if record.x_document: data = base64.b64decode(record.x_document). Dette er spesielt viktig i compute-metoder og server-aksjoner.

Oppsummering


Binary-feltet er et enkelt, men viktig element i Odoo-modellen. Det gir en innebygd måte å lagre dokumenter og filer som fungerer naturlig med Odoos vedleggssystem og tilgangskontroller.


Hovedvanene å følge: bruk attachment-modus, legg alltid til et filnavn-Char-felt ved siden av Binary-feltet, bruk fields.Image for visuelt innhold, begrens tilgang for sensitive dokumenter, og sørg for korrekt base64-håndtering i egendefinert kode. Disse tiltakene forhindrer de vanligste problemene før de dukker opp i produksjon.

Enten du legger til filopplasting med Odoo Studio, utvikler en modul i Python eller administrerer feltopprettelse via ORM eller XML-RPC, gir en riktig håndtering av Binary-feltene et renere og mer robust Odoo-oppsett fra starten av.

Hos Dasolo bistår vi selskaper med å implementere, tilpasse og optimalisere Odoo i hele organisasjonen. Enten det gjelder modellvalg, filhåndteringsarbeidsflyter eller full modulutvikling, står vårt team klart til å hjelpe. Ta kontakt med oss så tar vi en prat om ditt Odoo-prosjekt.

Binary Field i Odoo: Komplett Guide for Utviklere
Dasolo 6. mars 2026
Share this post
Logg inn to leave a comment