Introduktion
Boolean‑fältet är ett av de mest grundläggande byggstenarna i Odoo — enkelt i sin natur men oerhört vanligt. Varje gång du bockar i en ruta på en offert, markerar en kund som aktiv eller sparar en produkt som favorit, interagerar du med ett Boolean‑fält.
Trots sin enkelhet har Boolean‑fältet specifika beteenden som är värda att ha koll på. Rätt användning sparar tid och minskar risken för fel i filtrering, duplicering och automatisering; felaktig användning leder lätt till förvirring även i mogna Odoo‑installationer.
Den här guiden tar ett helhetsgrepp: vad fältet lagrar, hur det syns i gränssnittet och i databasen, hur du lägger till eller ändrar det via Studio, Python eller API, verkliga användningsområden och praktiska tips för att få fältet att fungera smidigt i dina processer.
Vad är en Boolean‑fält i Odoo
I Odoo/ORM representerar ett Boolean‑fält ett binärt val: True eller False. På databassidan motsvaras det av en BOOLEAN‑kolumn i PostgreSQL. Det finns ingen mellanposition — fältet är antingen på eller av.
För användaren visas Boolean‑fält oftast som en kryssruta i formulär. I listvyer visar Odoo normalt en bocksymbol för True och inget för False, vilket gör det lätt att snabbt överblicka poster. I vissa fall kan det också visas som en växel eller annan widget beroende på inställningarna.
Nedan följer ett exempel på hur ett Boolean‑fält definieras i en Python‑modul i Odoo:
from odoo import fields, models
class SaleOrder(models.Model):
_inherit = 'sale.order'
needs_manual_review = fields.Boolean(
string='Needs Manual Review',
default=False,
)
Parametern string anger etiketten i gränssnittet och default bestämmer startvärdet för nya poster. Även om Odoo utan explicit default tolkar ett oinitialiserat Boolean som False, är det god praxis att sätta default=False för tydlighet i koden.
I Odoo Studio heter samma fälttyp helt enkelt Checkbox. Fält som skapas via Studio får automatiskt ett x_studio_-prefix i det tekniska namnet. Skapas fältet via Python eller API bestämmer du själv det tekniska namnet.
Hur fältet fungerar
När du lägger till ett Boolean‑fält i en modell skapar Odoo automatiskt motsvarande kolumn i PostgreSQL vid installation eller uppgradering av modulen — inga manuella SQL‑migreringar krävs.
Viktigt: ett Boolean‑fält i Odoo returnerar aldrig None eller NULL från ORM‑lagret. Vid läsning får du alltid antingen True eller False. Detta skiljer sig från exempelvis Many2one eller Char där tomma värden kan bete sig annorlunda och kräva extra kontroller.
Viktiga fältattribut
Här är de vanligaste egenskaperna du kan konfigurera på ett Boolean‑fält i Odoo:
- default: Anger värdet när en ny post skapas. Vanligtvis
False, men kan sättas tillTruei opt‑out‑scenarier. - compute: Kopplar fältet till en Python‑metod som beräknar värdet dynamiskt — användbart för flaggor som härleds från andra fält.
- store: I kombination med
computeavgör det om värdet sparas i databasen. Medstore=Truekan det användas i sökfilter och rapporter. - readonly: Gör fältet skrivskyddat i gränssnittet — vanligt för systemstyrda beräknade flaggor.
- copy: Bestämmer om värdet kopieras när en post dupliceras. Standard är
True; för godkännanden bör du ofta användacopy=Falseså dubbletter börjar utan tidigare status. - groups: Begränsar visning och redigering till specifika användargrupper.
Hur det visas i vyer
I formulär renderas Boolean‑fält normalt som en HTML‑kryssruta. I listvyer används en bockikon för True och en tom cell för False, vilket underlättar snabb översikt. Det visuella uttrycket kan ändras med widgets för att passa olika UX‑behov.
Widgets som toggle visar fältet som en brytare — lämpligt för inställningar — och boolean_favorite renderar det som en stjärna, en vanlig lösning för favoriter i produkt‑ och kontaktkort.
Användning i domänfilter
Boolean‑fält är mycket lämpliga som filter i Odoos domänuttryck, som används i sökfält, automatiserade åtgärder och säkerhetsregler. Ett filter för markerade poster skrivs till exempel så här:
[('needs_manual_review', '=', True)]
Eftersom det bara finns två värden går det snabbt och tydligt att filtrera:
[('needs_manual_review', '=', False)]
Den här enkelheten gör Boolean‑fält populära i automationsregler och schemalagda åtgärder — de är lätta att testa mot och agera på utan komplicerade villkor.
Interaktion med Odoo ORM
Att läsa och skriva Boolean‑fält i utveckling är rakt på sak: du läser attributet på record‑objektet, jämför med True/False och tilldelar direkt. ORM tar hand om konverteringar och när du använder XML‑RPC mappas värdena korrekt till API:ets booleans.
Affärsscenarier
Praktiska exempel i olika avdelningar
CRM: Spåra om en lead är kvalificerad
Säljorganisationer använder ofta ett Boolean‑fält som is_qualified för att skilja granskade leads från öppna prospekt. Det gör pipeline‑hanteringen enklare — junior personal kan bearbeta oklassade leads medan seniora resurser fokuserar på de kvalificerade.
Försäljning: Markera order som kräver manuell granskning
Vissa order behöver extra kontroll — höga belopp eller nya kunder kan trigga ett needs_manual_review. Ett sådan flagga, gärna satt via en automatisk regel, skapar en tydlig kö för ekonomi eller drift att hantera innan ordern bekräftas.
Lager: Ange produkter som utgått ur sortimentet
När en produkt inte längre säljs men måste finnas kvar för historik är ett is_discontinued användbart. Det syns direkt för inköp och försäljning och kan användas i prislistfilter, inköpsregler och webbshopens synlighet.
Ekonomi: Identifiera fakturor som kräver uppmärksamhet
Istället för fria textnoteringar i chatter kan ett Boolean‑fält som under_dispute strukturera hanteringen av tvistade fakturor. Filtrering, rapporter och automatiserade påminnelser kan anpassas så att kontakter med flaggan slipper onödig betalningspress under utredning.
HR: Spåra genomgångna certifieringar och utbildningar
HR använder ofta Boolean‑fält på anställda, t.ex. safety_training_completed, för att snabbt se vilka som slutfört obligatorisk utbildning. Det förenklar uppföljning och ger underlag till compliance‑rapporter utan att bygga en separat modul.
Skapa eller anpassa Boolean‑fältet
Tre sätt att lägga till ett Boolean‑fält
Börja med att välja metod utifrån teknisk nivå och behov av spårbarhet: Studio för snabb no‑code, Python‑modul för versionering och testbarhet, eller API‑skapande för automatiserade pipelines.
Via Odoo Studio (utan kod)
- Starta Odoo Studio från appmenyn (Studio‑appen krävs).
- Öppna det formulär där du vill lägga till fältet.
- Dra in en Checkbox från sidopanelen till formulärets layout.
- Sätt etikett, standardvärde och eventuella read‑only eller obligatoriska inställningar i egenskapspanelen.
- Spara och avsluta Studio.
Studio skapar allt åt dig: databaskolumn med x_studio_-prefix och ändrad vy. Ingen serverrestart eller moduluppgradering behövs.
Via Python i en anpassad modul
För lösningar som ska versionshanteras och distribueras rekommenderas att definiera fält i Python‑modulen:
from odoo import fields, models
class ResPartner(models.Model):
_inherit = 'res.partner'
x_is_key_account = fields.Boolean(
string='Key Account',
default=False,
copy=False,
)
Efter att fältet definierats lägger du till det i motsvarande vy‑XML så att det syns i gränssnittet. Odoo skapar kolumnen vid installation eller uppgradering av modulen.
För beräknade Boolean‑fält används mönstret nedan:
from odoo import api, fields, models
class SaleOrder(models.Model):
_inherit = 'sale.order'
is_high_value = fields.Boolean(
string='High Value Order',
compute='_compute_is_high_value',
store=True,
)
@api.depends('amount_total')
def _compute_is_high_value(self):
for order in self:
order.is_high_value = order.amount_total >= 10000
Genom att sätta store=True sparas det beräknade värdet i databasen, vilket möjliggör sökning och gruppering utan att behöva räkna om vid varje sidladdning.
Via XML‑RPC API
Om du automatiserar konfiguration eller driver fjärrskript kan du skapa fält på modellen ir.model.fields via XML‑RPC:
field_id = models.execute_kw(
ODOO_DB, uid, ODOO_API_KEY,
'ir.model.fields', 'create',
[{
'name': 'x_needs_manual_review',
'field_description': 'Needs Manual Review',
'model_id': model_id,
'ttype': 'boolean',
'state': 'manual',
}]
)
Att ange state: manual betyder att fältet skapats utanför en modul — rätt inställning för fält som skapas via Studio eller API och ett vanligt arbetssätt vid automatiserade konfigurationer.
Bästa praxis
1. Ange alltid ett default‑värde
Även om Odoo implicit ger False är det bättre att explicit skriva default=False. Det tydliggör avsikten i koden och minskar tveksamhet när fältet används i regler och filter.
2. Använd beskrivande namn som läser som frågor
Ge Boolean‑fält namn som fungerar som ja/nej‑frågor: is_verified, needs_approval, has_warranty eller is_key_account. Undvik vaga namn som flag eller status som inte förklarar betydelsen.
3. Sätt copy=False för godkännanden och statusflagor
Om ett flaggfält visar en åtgärd som inte ska följa med vid duplicering — exempelvis "godkänd" — ange copy=False så dubbletter startar utan tidigare status och processen måste genomföras på nytt.
4. Använd beräknade Boolean när värdet är härlett
Istället för att sprida skrivoperationer över serveråtgärder, definiera fältet som beräknat med @api.depends(). Då är logiken centraliserad, automatisk vid sparande och mycket lättare att underhålla än utspridda uppdateringar.
5. Lägg till fält i sökvyn om det används för filtrering
Om användare ofta filtrerar på ett Boolean‑fält, inkludera det i sökvyn så det blir en synlig filterknapp i sökfältet istället för att tvinga fram avancerad filtrering.
Vanliga fallgropar
Att använda Boolean för fler än två tillstånd
Vanligaste misstaget: försöka modellera tre eller flera tillstånd med flera Boolean‑fält. Om posten kan vara "v_pending", "v_approved" eller "v_rejected" är en Selection‑fält eller ett statusflöde rätt lösning. Boolean är för verkligt binära val.
Glömma copy=False på godkännanden
Om du inte sätter copy=False kopieras värden vid duplicering, vilket kan leda till att nya poster felaktigt får status "godkänd" eller "granskad" utan att processen körts igen.
Att inte lägga till fältet i sökvyn
Om ett Boolean‑fält ofta används för att hitta poster men inte finns i sökvyn får användarna öppna avancerad filterdialog varje gång — det saktar ner dagligt arbete. Lägg till filtret direkt när du skapar fältet för att spara tid.
Använda Boolean i stället för det inbyggda active‑fältet
Odoo har redan ett active‑fält för att styra synlighet/arkivering. Om ditt syfte är att dölja poster, använd native active och tillhörande arkiveringsmekanismer istället för att skapa ett eget synlighetsfält.
Beräknade Boolean utan store=True vid filtrering
En beräknad Boolean som inte är lagrad kan inte användas i SQL‑filter eller gruppering — Odoo antingen vägrar eller ignorerar filtret. Om värdet behöver vara sökbart eller rapportbart, sätt store=True.
Sammanfattning
Ett väl implementerat Boolean‑fält märks knappt — det bara gör jobbet. Från active till is_published är dessa flaggor små men kraftfulla hjälpmedel i vardagsprocesser.
Att förstå dess beteenden i datamodellen, ställa in tydliga defaults och välja rätt attribut gör dina Odoo‑lösningar mer förutsägbara och enklare att underhålla, särskilt när du jämför med mer komplexa fälttyper som Selection.
Ett Boolean‑fält som är rätt uppsatt är osynligt för slutanvändaren: det fungerar. Felanvänt skapar det däremot förvirring, felaktiga tillstånd och teknisk skuld. Skillnaden ligger i att följa enkla principer och vara konsekvent.
På Dasolo hjälper vi företag att designa, anpassa och optimera sina Odoo‑lösningar i alla avdelningar. Oavsett om du behöver strukturera datamodellen, lägga till smarta fält eller bygga en modul från grunden finns vi till hands. Kontakta oss så tar vi ett samtal om ditt Odoo‑projekt.