Skip to Content

Slik fikser du “ValueError: Expected Singleton” i Odoo

Få kontroll på feilen "expected singleton" i Odoo: enkel forklaring, hvorfor den oppstår, og konkrete steg-for-steg-løsninger for både sluttbrukere og utviklere.
17. februar 2026 etter
Elisa Van Outrive
| No comments yet

Innledning


Hvis du har brukt Odoo en stund, er sannsynligheten stor for at du har støtt på den beryktede feilmeldingen:


ValueError: Expected singleton

Dette er en av de vanligste ORM-feilene i Odoo. Den dukker opp når en funksjon forventer nøyaktig én post, men får flere. Selv om meldingen virker teknisk, ligger årsaken ofte i hvordan Odoo behandler recordsets — og det er som regel enkelt å rette når du forstår det.


Denne veiledningen forklarer hva Expected Singleton betyr, hvorfor den oppstår og hvordan du retter den uten å bryte forretningslogikk eller integrasjoner.

Hva betyr «Expected Singleton» i Odoo?


Odoo sin ORM (Object Relational Mapping) opererer primært på recordsets, ikke enkeltobjekter. Et recordset kan inneholde:

  • Én post
  • Flere poster
  • Ingen poster

Når Odoo kjører en metode som i praksis skal arbeide med én post, men får et recordset med flere poster, kastes feilen:


ValueError: Expected singleton

Enklere sagt:

Odoo ventet én post. Den mottok flere.

Denne feilen dukker ofte opp i:

  • Serverlogger
  • Egendefinerte modulmetoder
  • Beregnete felter
  • Knappehandlinger
  • Automatiserte handlinger
  • Massoppdateringer

Forståelse av recordset-oppførsel er nøkkelen til å rette det riktig.



Hvorfor oppstår denne feilen


 

1. Feil forståelse av recordsets


I Odoo vil self nesten alltid være et recordset.

Selv om du tror du jobber med én post, kan metodene bli kalt for flere poster under operasjoner som:

  • Batch-operasjoner i listevisninger
  • Automatiserte arbeidsflyter
  • Serveraksjoner
  • API-importer

Kode som antar én post vil derfor kunne feile i slike sammenhenger.


2. Manglende løkke i metoden


Problemstilling: Enkel kode som antar enkeltpost kan bli tvetydig når recordset inneholder flere poster.

Eksempel på kode som skaper problemer:

Hvis self inneholder flere poster oppstår det uklarhet og potensielt feil.


Riktig tilnærming:


Iterer over hver post og oppdater feltet per rad — det gjør koden trygg i batch-situasjoner.

3. Feil bruk av ensure_one()


Odoo tilbyr en hjelpefunksjon for streng kontroll:


self.ensure_one()

Den tvinger metoden til å kreve nøyaktig én post. Dersom flere poster finnes, kastes Expected Singleton med vilje.


Bruk ensure_one() bare når forretningsreglene krever ett enkelt objekt (for eksempel ved åpning av en formeny).


4. Søk som returnerer flere poster


Typisk scenarie: Søk i modellen kan gi mer enn én treff, og etterfølgende logikk forventer én.


Eksempel på søk som kan gi flere resultater:

Hvis flere treff finnes for samme navn, vil senere kode som antar én post feile.


Sikrere alternativ:


Bruk limit=1 når du virkelig bare trenger ett objekt fra et søk.

5. Relasjonsfelt som skaper tvetydighet


Feil oppstår ofte i sammenhenger med Many2one eller One2many.


Typisk scenarie: Søk i modellen kan gi mer enn én treff, og etterfølgende logikk forventer én.


Eksempel på problematisk uttrykk når relasjonen inneholder flere rader:

Hvis order_line inneholder flere linjer blir uttrykket tvetydig og kan utløse feilen.

Slik fikser du Expected Singleton-feilen


 

Steg 1 – Iterer over recordsets


Grunnregel i Odoo:


Anta at self kan inneholde flere poster og skriv koden deretter.

Forhåndsregel: bruk løkker og behandl hver post separat der det er naturlig.

Steg 2 – Bruk limit=1 når det er riktig


Der hvor kun ett objekt gir mening i forretningssammenheng:


Hent ett resultat eksplisitt med limit=1 for å unngå flertallsresultater.

Steg 3 – Valider relasjonsfelt


Sjekk nøye følgende elementer:


  • Many2one-relasjoner
  • One2many-samlinger
  • Domain-filtre

Sørg for at du ikke utilsiktet arbeider med flere rader der du trodde det var én.


Steg 4 – Gjennomgå API- og importprosesser


I miljøer med mye integrasjon kan batch-operasjoner ofte utløse denne feilen fordi flere poster behandles samtidig.


Hvis Odoo synkroniserer data fra eksterne systemer, sørg for at logikken tåler behandling i batch.

Hvordan unngå denne feilen i fremtidig Odoo-utvikling



  • Unngå å anta enkeltpost-kontekst
  • Test metoder med flere valgte poster
  • Bruk løkker som standard
  • Legg til limit=1 med vilje
  • Hold relasjoner og datastruktur ryddige

I komplekse integrasjoner dukker slike feil ofte opp under automatiske importkjøringer eller planlagte jobber. Utvikle metoder som tåler flere rader samtidig for å sikre stabil drift.

Slik håndterer Dasolo recordset- og ORM-feil


Expected Singleton er sjelden bare en småfeil i koden. I velstrukturert Odoo-utvikling peker den ofte på dypere antakelser om recordset-behandling, ORM-bruk og datakonsistens.


I Dasolo tar vi ORM-feil på alvor ved å analysere hvordan recordsets behandles gjennom hele modulens livssyklus. Singleton-feil oppstår typisk når forretningslogikk er skrevet for enkeltposter, men kjøres på flertall — særlig i automatiske prosesser, integrasjoner og beregnede felter.


For å unngå gjentakende singleton-feil fokuserer vi på:


  • Konsistente mønstre for iterasjon over recordsets
  • Bevisst og sikker bruk av ensure_one()
  • Forutsigbare og tydelige domain-filtre
  • Ryddig struktur for relasjonsfelt
  • Kontrollerte utløserpunkter for automatisering

Ved å designe ORM-logikk med skalerbarhet og batch-sikkerhet i tankene reduseres overraskende runtime-feil i produksjon betraktelig.



Oppsummering


Odoo-feilen Expected Singleton er en vanlig ORM-unntak som oppstår når koden prøver å behandle flere poster mens den forventer én. Selv om det ofte virker som en enkel utviklerglipp, kan det avdekke svakheter i hvordan recordsets håndteres i tilpassede moduler eller automatiserte prosesser.


Ved å forstå hvordan Odoo håndterer recordsets og ved å bruke sikre iterasjonsmønstre kan utviklere redusere forekomsten av denne feilen. Klare valideringer, forutsigbar filtrering og kontrollert automatisering er sentralt for stabile Odoo-løsninger.


Når singleton-feil håndteres riktig blir de nyttige varselsignaler som hjelper deg å styrke kodekvaliteten og øke systemets pålitelighet over tid.

Ofte stilte spørsmål


Nei. Den finnes i Odoo 14, 15, 16 og 17.

Nei. Det er en logisk feil i hvordan poster behandles.

Nei. Kun når forretningslogikken uttrykkelig krever at metoden kjøres på én post.


Elisa Van Outrive 17. februar 2026
Share this post
Logg inn to leave a comment