Przejdź do zawartości

Pole typu Boolean w Odoo — Kompletny przewodnik dla deweloperów

Kompletny przewodnik po polu logicznym (Boolean) w modelu danych Odoo — od sposobu działania pola jako checkbox po praktyczne wskazówki techniczne dotyczące jego modyfikacji
6 marca 2026 przez
Pole typu Boolean w Odoo — Kompletny przewodnik dla deweloperów
Dasolo
| Brak komentarzy na ten moment

Wstęp


Pole typu Boolean to jedno z najprostszych i najczęściej używanych pól w Odoo. Za każdym razem, gdy zaznaczasz checkbox na zamówieniu sprzedaży, oznaczasz klienta jako aktywnego lub ustawiasz produkt jako ulubiony, operujesz właśnie na polu Boolean.


Mimo swojej prostoty, pole Boolean ma kilka drobnych cech, które warto poznać. Wiedza o tym, kiedy używać tego typu pola, jak je skonfigurować i kiedy lepiej wybrać inną konstrukcję, pomaga budować czytelniejszy system Odoo i unikać typowych pułapek.


Ten przewodnik omawia pole Boolean kompleksowo: co przechowuje, jak zachowuje się w modelu danych i w interfejsie, jak dodać je przez Odoo Studio lub w Pythonie, praktyczne przypadki użycia oraz praktyczne wskazówki do wdrożeń.

Czym jest pole Boolean w Odoo


W ORM Odoo pole Boolean przechowuje jedną z dwóch wartości: True albo False. Na poziomie bazy danych odpowiada kolumnie typu BOOLEAN w PostgreSQL — nie ma tu miejsca na półśrodki: pole albo jest zaznaczone, albo nie.


Dla użytkownika pole Boolean zwykle wygląda jak checkbox w formularzach. Na listach widoczność jest uproszczona: zobaczysz znacznik (ptaszek) dla True, a dla False pole pozostaje puste. W zależności od widgetu można też zobaczyć przełącznik (toggle) zamiast klasycznego checkboxa.


Poniżej widzisz typowy sposób zdefiniowania pola Boolean w module Pythona:

from odoo import fields, models

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

    needs_manual_review = fields.Boolean(
        string='Needs Manual Review',
        default=False,
    )

Parametr string określa etykietę wyświetlaną w UI, a default ustala wartość początkową przy tworzeniu nowych rekordów. Choć Odoo domyślnie traktuje brak wartości jako False, warto zdeklarować to jawnie dla czytelności kodu.

W Odoo Studio ten sam typ pola występuje pod nazwą Checkbox. Pola stworzone przez Studio otrzymują automatycznie prefiks x_studio_, natomiast przy definiowaniu w Pythonie sam wybierasz nazwę techniczną.

Jak działa to pole


Gdy dodasz pole Boolean do modelu, Odoo podczas instalacji lub aktualizacji modułu automatycznie utworzy odpowiednią kolumnę w PostgreSQL — nie musisz pisać migracji SQL ręcznie.


Ważne: pole Boolean w Odoo nigdy nie zwróci None ani NULL. ORM zawsze zwróci True lub False. Nawet jeśli kolumna w bazie wydaje się pusta, odczyt zwróci False. To odróżnia je od innych typów, takich jak Many2one czy Char, gdzie trzeba uwzględniać None.


Kluczowe atrybuty pola

Oto najważniejsze właściwości pola Boolean, które możesz skonfigurować w Odoo:

  • default: Ustala wartość przy tworzeniu rekordu. Najczęściej False, ale można ustawić True w scenariuszach opt-out.
  • compute: Powiązuje pole z metodą Pythona, która oblicza wartość dynamicznie. Przydaje się do flag pochodnych zależnych od innych pól.
  • store: W połączeniu z compute decyduje, czy wartość jest zapisywana w bazie. Z store=True pole obliczone staje się dostępne w filtrach i raportach.
  • readonly: Uniemożliwia ręczną zmianę pola w interfejsie. Typowe dla pól obliczanych, które powinien ustawiać jedynie system.
  • copy: Określa, czy wartość pola jest kopiowana przy duplikowaniu rekordu. Domyślnie True; dla pól typu "zatwierdzony" lepiej ustawić copy=False.
  • groups: Ogranicza widoczność i edycję tylko do wybranych grup użytkowników.

Jak pole wygląda w widokach

W formularzu pole Boolean renderuje się jako standardowy checkbox. Na listach domyślnie zobaczysz ikonę ptaszka dla True i pustą komórkę dla False, co ułatwia szybki przegląd rekordów.

Możesz zmienić sposób wyświetlania przez widgety widoku. toggle pokazuje przełącznik zamiast checkboxa — dobre do ustawień. Dla trybu tylko do odczytu boolean_favorite wyświetla gwiazdkę, jak np. na formularzach produktów czy kontaktów.


Użycie pól Boolean w domenach filtrujących

Pola Boolean świetnie nadają się do użycia w domenach Odoo — czyli wyrażeniach filtrujących w widokach wyszukiwania, akcjach automatycznych i regułach dostępu. Filtr dla zaznaczonych rekordów wygląda tak:

[('needs_manual_review', '=', True)]

Skoro wartości są tylko dwie, możesz użyć też prostej postaci z operatorem równości:

[('needs_manual_review', '=', False)]

Ta prostota sprawia, że pola Boolean dobrze integrują się z akcjami automatycznymi, harmonogramami i serwerowymi zadaniami — łatwo na nich bazować bez rozbudowanych warunków.


Interakcja z ORM Odoo

Odczyt i zapis pól Boolean w kodzie Odoo jest bardzo bezpośredni: odwołujesz się do wartości na obiekcie rekordu, porównujesz do True lub False i przypisujesz. ORM zajmuje się resztą — nie ma tu konwersji ani problemów przy przesyłaniu przez XML-RPC, bo wartości mapują się jednoznacznie.

Przykłady zastosowań w biznesie


Pola Boolean pojawiają się praktycznie w każdej części firmy korzystającej z Odoo. Poniżej pięć praktycznych przykładów.


CRM: Oznaczanie zakwalifikowanych leadów

Zespoły sprzedaży często muszą szybko rozróżnić leady, które zostały sprawdzone przez seniora i nadają się do pracy. Pole Boolean, np. is_qualified na modelu lead, daje prosty filtr pipeline’u: nieskwalifikowane prowadzi młodszy zespół, skwalifikowane idą do priorytetowej obsługi. Dzięki temu nie trzeba tworzyć dodatkowego etapu tylko po to, by rozróżnić kwalifikację.


Sprzedaż: Oznaczanie zamówień wymagających ręcznej weryfikacji

W niektórych firmach zamówienia powyżej określonej wartości lub od nowego klienta muszą przejść dodatkową kontrolę. Pole needs_manual_review na zamówieniu, ustawiane automatycznie według reguł, tworzy czytelną kolejkę do przetworzenia przez dział finansów czy operacji. Dzięki temu pracownicy filtrują listę zamówień i zatwierdzają je bez żmudnego przeszukiwania.


Magazyn: Oznaczanie produktów poza katalogiem

Gdy produkt przestaje być sprzedawany, ale musi pozostać w systemie dla historii, nie zawsze warto go archiwizować. Pole is_discontinued na szablonie produktu pozwala kupcom i sprzedawcom od razu widzieć, że przedmiot nie powinien być ponownie zamawiany ani proponowany klientom. Taka flaga przydaje się w filtrach cenników, regułach walidacji zamówień zakupu i widoczności sklepu internetowego.


Księgowość: Identyfikacja faktur wymagających uwagi

Dział finansowy czasem musi oznaczyć faktury jako sporne, z rozbieżnością cenową lub oczekujące na nota kredytową. Zamiast polegać na notatkach, pole Boolean under_dispute daje strukturalny sposób filtrowania i raportowania. Automatyczne przypomnienia można wyłączyć dla takich faktur, żeby nie naciskać klienta, dopóki sprawa nie zostanie wyjaśniona.


HR: Śledzenie ukończenia szkoleń i certyfikatów

Działy HR muszą potwierdzać, kto przeszedł obowiązkowe szkolenia lub ma wymagane uprawnienia. Pole Boolean na rekordzie pracownika, np. safety_training_completed, to prosty i audytowalny mechanizm do kontroli. Menedżerowie szybko filtrują listę pracowników i sprawdzają brakujące szkolenia, a dane z takiego pola trafiają do raportów zgodności bez konieczności budowania rozbudowanego modułu.

Tworzenie i dopasowywanie pola Boolean


Są trzy typowe sposoby dodawania pola Boolean do modelu Odoo, zależnie od poziomu dostępu technicznego i potrzeb personalizacji.


Za pomocą Odoo Studio (bez kodu)

Odoo Studio to narzędzie low-code do personalizacji Odoo bez pisania Pythona czy XML. Aby dodać pole Boolean w Studio:

  1. Otwórz Odoo Studio z głównego menu (wymagana aplikacja Studio).
  2. Przejdź do formularza, do którego chcesz dodać pole.
  3. Przeciągnij pole Checkbox z paska narzędzi na układ formularza.
  4. Ustaw etykietę, wartość domyślną oraz ograniczenia typu wymagane lub tylko do odczytu w panelu właściwości pola.
  5. Zapisz i zamknij Studio.

Studio załatwia wszystko automatycznie: pole tworzy się w bazie z prefiksem x_studio_ i zostaje dodane do widoku — nie jest potrzebny restart ani aktualizacja modułu.


W kodzie Pythona w module niestandardowym

Dla deweloperów tworzących moduły Odoo pola Boolean definiuje się w plikach modelu w Pythonie. To zalecana droga, gdy potrzebujesz kontroli wersji, testów i wdrożeń na wielu środowiskach:

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,
    )

Po zdefiniowaniu pola dodaj je do odpowiedniego pliku XML widoku, żeby było widoczne w interfejsie. Odoo utworzy kolumnę w bazie podczas instalacji lub aktualizacji modułu.


Dla pól obliczanych pattern wygląda tak:

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

Dzięki store=True obliczona wartość jest zapisana w bazie, dzięki czemu możesz filtrować i grupować po tym polu bez ponownego przeliczania przy każdym ładowaniu.


Przez XML-RPC API

Jeśli zarządzasz konfiguracją Odoo programowo — np. w pipeline wdrożeniowym lub skrypcie zdalnym — pola Boolean można tworzyć przez API XML-RPC na modelu ir.model.fields:

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',
    }]
)

Ustawienie state: manual informuje Odoo, że pole powstało poza modułem — to właściwe dla pól z Studio lub tworzonych przez API. Takie podejście stosuje się przy automatycznej konfiguracji klientów.


Dobre praktyki


1. Zawsze deklaruj wartość domyślną

Chociaż Odoo zwróci False przy braku domyślnej wartości, najlepiej jawnie ustawić default=False. To czytelnie komunikuje intencję w kodzie i zapobiega niejasnościom w automatyzacjach czy filtrach.


2. Nazwy powinny brzmieć jak pytania

Nazewnictwo pól Boolean działa najlepiej, gdy czyta się je jak pytanie tak/nie. Przykłady: is_verified, needs_approval, has_warranty, is_key_account. Unikaj ogólników typu flag, status czy check, które nie wyjaśniają znaczenia pola.


3. Ustaw copy=False dla flag zatwierdzeń i statusów

Jeżeli pole Boolean reprezentuje stan, który nie powinien przechodzić na skopiowany rekord (np. "zatwierdzono"), dodaj copy=False. W przeciwnym razie duplikat odziedziczy flagę i może wyglądać, jakby przeszedł wymagane procesy, choć tak nie jest.


4. Używaj pól obliczanych do stanów pochodnych

Zamiast pisać rozproszone akcje serwerowe, które nadpisują pole przy zmianach innych pól, lepiej zdefiniować je jako compute z @api.depends(). Logika w jednym miejscu jest łatwiejsza do utrzymania, uruchamia się automatycznie przy zapisie i zmniejsza ryzyko błędów.


5. Dodaj pole do widoku wyszukiwania, jeśli będzie używane do filtrów

Jeśli użytkownicy często filtrują po danej fladze, umieść pole w widoku <search>. W Studio włącz opcję wyszukiwania w panelu właściwości, w kodzie dodaj pole do XML wyszukiwania — dzięki temu będą mieli wygodny filtr zamiast używać zaawansowanego wyszukiwania.

Najczęściej popełniane błędy


Używanie Boolean tam, gdzie potrzeba więcej niż dwóch stanów

To najczęstszy błąd. Jeśli rekord może być w trzech lub więcej stanach (np. "oczekuje", "zatwierdzony", "odrzucony"), pole Boolean nie jest odpowiednie. Prowadzi to do wielu flag i skomplikowanej logiki. Zamiast tego użyj pola Selection lub workflow statusowego.


Zapominanie o copy=False dla flag zatwierdzeń

Domyślnie przy duplikowaniu wszystkie wartości są kopiowane. Rekord oznaczony jako "zatwierdzony" zostanie skopiowany razem z tą flagą, co może wprowadzać w błąd. Jeśli duplikat powinien zaczynać od zera, ustaw copy=False dla takich pól.


Nieumieszczenie pola w widoku wyszukiwania

Pola Boolean, po których użytkownicy często filtrują, a których brakuje w widoku wyszukiwania, zmuszają do zaawansowanych filtrów za każdym razem. To spowalnia pracę. Dodaj takie pole do widoku wyszukiwania od razu.


Zastępowanie wbudowanego pola active własnym Booleanem

W Odoo wiele modeli ma wbudowane pole active do kontrolowania widoczności rekordów. Jeśli chcesz ukryć lub archiwizować rekordy, skorzystaj z natywnego active, zamiast tworzyć własny mechanizm — to utrzymywanie zgodne ze standardami Odoo i działa z wbudowanymi akcjami archiwizacji.


Pola obliczane bez store=True przy użyciu w filtrach

Jeżeli stworzysz pole obliczane i spróbujesz filtrować po nim lub grupować bez store=True, Odoo albo zgłosi błąd, albo zignoruje filtr. Pole nieprzechowywane istnieje tylko w pamięci i nie może być użyte w zapytaniach SQL. Jeśli chcesz filtrować lub raportować, ustaw store=True.

Podsumowanie


Pole Boolean to taki element systemu, którego przestajesz świadomie używać, bo po prostu działa. W Odoo spotkasz je wszędzie: od active kontrolującego widoczność, przez is_published na stronę internetową, po dziesiątki niestandardowych flag dodawanych przez firmy.


Zrozumienie jego zachowania w modelu danych, odpowiednie ustawienie domyślnych wartości i atrybutów oraz umiejętność odróżnienia sytuacji, gdy lepsze będzie pole Selection, pozwalają tworzyć implementacje czytelne, przewidywalne i łatwe w utrzymaniu.

Dobrze zaprojektowane pole Boolean jest niewidoczne dla użytkownika — po prostu działa. Źle użyte pole wprowadza zamieszanie, niespójne stany i lawinę obejść. Kluczem jest znajomość zasad i konsekwentne ich stosowanie.

W Dasolo wspieramy firmy we wdrażaniu, dostosowywaniu i optymalizowaniu Odoo w całej organizacji. Jeśli potrzebujesz pomocy przy zaprojektowaniu czystego modelu danych, dodaniu pól do procesów biznesowych lub stworzeniu kompletnego modułu, nasz zespół jest do dyspozycji. Skontaktuj się z nami i porozmawiajmy o Twoim projekcie Odoo.

Pole typu Boolean w Odoo — Kompletny przewodnik dla deweloperów
Dasolo 6 marca 2026
Udostępnij ten artykuł
Zaloguj się by zostawić komentarz