Przejdź do zawartości

ir.model w Odoo — Jak działa rejestr modeli i po co jest potrzebny

Pełny przewodnik po modelu metadanych, który opisuje każdą klasę danych w systemie Odoo
11 marca 2026 przez
ir.model w Odoo — Jak działa rejestr modeli i po co jest potrzebny
Dasolo
| Brak komentarzy na ten moment

Wstęp


W Odoo każda informacja biznesowa — faktury, zamówienia, kontrahenci — trafia do systemu jako rekord pewnego modelu. Modele określają strukturę danych i sposób ich przechowywania w bazie, dlatego rozumienie ich roli jest kluczowe dla efektywnej pracy z systemem.


Znajomość architektury modeli przydaje się zarówno programistom, jak i konsultantom funkcjonalnym. To modele definiują pola, relacje i logikę biznesową; wiedza o nich to fundament przy modyfikacjach, rozszerzeniach i analizie systemu.


Gdzie Odoo przechowuje informacje o wszystkich tych modelach? Za to odpowiada ir.model — centralny rejestr metadanych. Gdy tworzysz własny moduł, projektujesz model w Studio lub sprawdzasz API, prędzej czy później trafisz na ir.model.

Czym jest model ir.model


ir.model to tabelka z jedną pozycją na każdy model obecny w systemie. Kiedy zdefiniujesz nowy model w Pythonie lub przez Studio, system dodaje lub aktualizuje rekord w tym rejestrze — to jego sposób na śledzenie struktury aplikacji.


Ten rejestr jest częścią rdzenia Odoo i używany przez moduł base. Niezależnie od tego, czy mamy do czynienia z modelem standardowym, abstrakcyjnym czy tymczasowym (transient), powinien istnieć odpowiadający mu wpis w ir.model, o ile model ma fizyczne odwzorowanie w DB.


ir.model współpracuje ściśle z ir.model.fields — tabelą opisującą każde pole w modelu. Razem zapewniają mechanizmy introspekcji: dzięki nim system i zewnętrzne narzędzia mogą „przeczytać” strukturę modeli i ich pól.


Deweloperzy odwołują się do ir.model, kiedy potrzebują wypisać dostępne modele, prześledzić dziedziczenie lub zbudować narzędzia działające uniwersalnie dla różnych modeli. Rejestr jest także dostępny przez API (XML-RPC/JSON-RPC) do automatycznej analizy.

Kluczowe pola w modelu


Poniżej zebrano najważniejsze pola, które znajdziesz w ir.model. Znajomość ich znaczenia ułatwi pracę z rejestrem i zrozumienie, co dany model reprezentuje.


1. name

Typ: Char. Czytelna, często tłumaczalna nazwa modelu używana w interfejsie technicznym i narzędziach deweloperskich. To etykieta, którą zobaczysz podczas przeglądania listy modeli.


2. model

Typ: Char. Techniczna nazwa modelu używana w kodzie, np. res.partner czy sale.order. Pole jest wymagane i indeksowane, aby szybko wyszukiwać metadane po nazwie.


3. info

Typ: Text. Dodatkowy opis lub notatki dotyczące modelu — przydatne w dokumentacji wewnętrznej, często puste dla prostszych modeli.


4. state

Typ: Selection. Określa pochodzenie modelu: 'base' dla modeli z modułów Odoo lub 'manual' dla tych utworzonych przez użytkownika (Studio) czy niestandardowego kodu. Modele systemowe mają zwykle ograniczenia edycyjne.


5. transient

Typ: Boolean. Flaga określająca, czy model jest tymczasowy (transient). Modele transient służą do przechowywania danych tymczasowych i są okresowo czyszczone — typowe dla kreatorów i okien dialogowych.


6. field_id

Typ: One2many (ir.model.fields). Lista wszystkich pól przypisanych do modelu. Każdy rekord ir.model.fields zawiera szczegóły jednego pola: jego nazwę, typ i atrybuty.


7. access_ids

Typ: One2many (ir.model.access). Zestaw reguł uprawnień dotyczących modelu — które grupy mogą tworzyć, czytać, modyfikować lub usuwać rekordy.


8. rule_ids

Typ: One2many (ir.rule). Zasady ograniczające dostęp do konkretnych rekordów (row-level security). Wykorzystywane do definiowania widoczności danych na poziomie wiersza.


9. inherited_model_ids

Typ: Many2many (ir.model). Powiązania z modelami nadrzędnymi w przypadku dziedziczenia. Gdy rozszerzasz istniejący model, tutaj znajdzie się lista rodziców.


10. modules

Typ: Char. Pole obliczane pokazujące moduły, które definiują lub rozszerzają dany model — pomocne przy analizie zależności i źródeł definicji.


11. sort

Typ: Integer. Określa kolejność wyświetlania modelu w menu Technicznym; mniejsze wartości pojawiają się wcześniej, co ułatwia porządkowanie listy.


12. constrains

Typ: Text. Kod definiujący ograniczenia Pythona (@api.constrains) używany do niestandardowej walidacji danych na poziomie modelu.


13. post_constrains

Typ: Text. Definicje walidacji wykonywane po podstawowych ograniczeniach — stosowane w bardziej złożonych scenariuszach sprawdzania poprawności.


14. sql_constraints

Typ: Text. Ograniczenia na poziomie bazy danych (np. unikalne indeksy) zapewniające integralność danych poza logiką aplikacji.


15. view_ids

Typ: One2many (ir.ui.view). Pole obliczane z listą widoków powiązanych z modelem — przydatne przy zarządzaniu interfejsem i introspekcji widoków.


16. record_count

Typ: Integer. Pole obliczane pokazujące liczbę rekordów tego modelu w bazie — szybka informacja o skali danych przechowywanych przez model.


17. display_name

Typ: Char. Pole obliczane używane do prezentacji rekordu w relacjach i listach; zwykle łączy nazwę i inne identyfikatory dla czytelniejszego wyświetlania.


18. create_date

Typ: Datetime. Data i godzina utworzenia rekordu w rejestrze — zarządzane automatycznie przez system.


19. create_uid

Typ: Many2one (res.users). Użytkownik, który utworzył dany wpis — używane do audytu i śledzenia zmian.


20. write_date

Typ: Datetime. Data i czas ostatniej modyfikacji rekordu — także aktualizowana automatycznie.


21. write_uid

Typ: Many2one (res.users). Użytkownik, który ostatnio edytował rekord — istotne przy analizie zmian.


22. active

Typ: Boolean. Flaga archiwizacji; gdy False, rekord jest wyłączony (soft delete) i zwykle nie widoczny w standardowych widokach.


23. id

Typ: Integer. Unikalny identyfikator w bazie danych — używany przy odwołaniach przez API i wewnętrznych relacjach.


24. restrict_functionality

Typ: Boolean. Flaga wskazująca ograniczenia funkcjonalne zależne od edycji Odoo (np. Enterprise vs Community).


25. is_mail_thread

Typ: Boolean. Określa, czy model obsługuje chatter (wiadomości i śledzenie) — modele z tą flagą mają powiązania z systemem komunikacji.


26. is_mail_activity

Typ: Boolean. Flaga mówiąca, czy model obsługuje aktywności (planer zadań) — przydatne przy śledzeniu kolejnych kroków pracy.

Jak model wpływa na procesy biznesowe


1. Ustawienia techniczne i konfiguracja

Administratorzy korzystają z menu Ustawienia techniczne, aby przeglądać zarejestrowane modele. To tam ir.model decyduje, co zostanie pokazane — nazwa, opis i liczba pól pomagają zorientować się w zawartości systemu.


2. Zarządzanie uprawnieniami

Przy konfiguracji bezpieczeństwa przypisujesz prawa do grup. access_ids w ir.model definiuje, które grupy mogą tworzyć, odczytywać, modyfikować lub usuwać rekordy danego modelu.


3. Dostosowania w Odoo Studio

Tworząc modele w Odoo Studio otrzymujesz nowe wpisy ir.model ze statusem manual; pole field_id zostanie wypełnione utworzonymi polami. To umożliwia szybkie prototypowanie bez kodu.


4. Odkrywanie przez API i integracje

Systemy zewnętrzne łączące się z Odoo mogą odpytywać ir.model przez XML-RPC/JSON-RPC, aby poznać dostępne modele i ich strukturę — to podstawowa metoda automatycznej integracji i generowania klienta API.


5. Tworzenie modułów i debugowanie

Deweloperzy patrzą na ir.model, by zrozumieć łańcuch dziedziczenia (inherited_model_ids) i listę pól (field_id). To jeden z narzędzi pomocnych przy tworzeniu i naprawianiu rozszerzeń.

Jak deweloperzy rozszerzają rejestr modeli


Rzadko modyfikuje się ir.model bezpośrednio — zazwyczaj wystarczy zdefiniować nowe modele czy pola, a rejestr zostanie zaktualizowany automatycznie podczas ładowania modułu.


Dziedziczenie modeli

Gdy w Pythonie użyjesz _inherit = 'res.partner', Odoo zaktualizuje wpisy rejestru tak, by odzwierciedlić relacje z modelem rodzica. Pole inherited_model_ids pokazuje powiązania między modelem bazowym a rozszerzeniami.


Dodawanie pól

Dodając pola do modelu system tworzy odpowiadające rekordy w ir.model.fields i łączy je z ir.model przez model_id; sam wpis w ir.model zwykle pozostaje bezpośrednio niezmieniony.


Rozszerzenia w Pythonie

Zamiast nadpisywać metody ir.model, standardowym podejściem jest rozszerzanie poszczególnych modeli opisanych w rejestrze. ir.model pełni rolę źródła metadanych, a logikę biznesową zmieniasz w klasach modeli.


Odoo Studio

Studio automatycznie tworzy wpisy w ir.model i ir.model.fields podczas projektowania modeli bez kodu. Flaga transient pozwala odróżnić modele tymczasowe. Modele abstrakcyjne nie generują wpisów w rejestrze, bo nie mają tabeli w DB.

Dobre praktyki


  • Do introspekcji i dynamicznej walidacji integracji zapytuj ir.model zamiast na stałe wpisywać nazwy modeli w kodzie — to ułatwia utrzymanie i kompatybilność.
  • Używaj pola model do wyszukiwań — jest indeksowane i pozwala szybko pobrać metadane konkretnego modelu.
  • Sprawdzaj inherited_model_ids przed rozszerzaniem modeli — zrozumienie łańcucha dziedziczenia zapobiegnie konfliktom i nieoczekiwanym skutkom modyfikacji.
  • Korzystaj z API (XML-RPC/JSON-RPC) do bezpiecznego odczytu ir.model. Unikaj bezpośrednich zmian, chyba że tworzysz narzędzie podobne do Studio.
  • Do analizy pól wykorzystuj ir.model.fields — relacja field_id dostarczy pełnej listy pól i ich atrybutów dla danego modelu.

Typowe błędy


  • Modyfikowanie ir.model ręcznie bywa niebezpieczne: rejestr jest zarządzany przez system i zmiany mogą zostać nadpisane podczas aktualizacji lub wywołać błędy.
  • Nie myl ir.model z klasą Pythona modelu — ir.model to rekord metadanych w bazie; klasa to implementacja biznesowej logiki. Obie warstwy są powiązane, lecz różne.
  • Pamiętaj, że modele abstrakcyjne nie zawsze mają wpis w ir.model — nie tworzą tabeli w DB, dlatego nie pojawią się w rejestrze.
  • Nie zapominaj o modelach tymczasowych — transient oznacza porządkowanie i czyszczenie danych. Nie używaj ich do przechowywania trwałych informacji.
  • Nie odpytywaj ir.model bez filtrów — w typowej instancji Odoo jest setki modeli. Używaj warunków wyszukiwania, by ograniczyć zbiór wyników.

Podsumowanie


ir.model to centralny rejestr wszystkich modeli Odoo, przechowujący metadane i powiązania z ir.model.fields. Zrozumienie tego mechanizmu ułatwia orientację w strukturze danych systemu.


Niezależnie od roli — konsultanta przeglądającego ustawienia techniczne czy integratora piszącego klienta API — znajomość ir.model przyspieszy pracę i zmniejszy ryzyko błędów.

Potrzebujesz pomocy z wdrożeniem Odoo?


Dasolo wspiera firmy we wdrożeniach, modyfikacjach i optymalizacji Odoo. Specjalizujemy się w integracjach API i rozwoju modułów, a nasz zespół ma praktyczne doświadczenie z architekturą danych Odoo i modelami takimi jak ir.model.


Potrzebujesz wsparcia przy wdrożeniu Odoo, tworzeniu modułów lub integracji? Chętnie pomożemy. Umów demo aby porozmawiać o Twoim projekcie.

ir.model w Odoo — Jak działa rejestr modeli i po co jest potrzebny
Dasolo 11 marca 2026
Udostępnij ten artykuł
Zaloguj się by zostawić komentarz