Wstęp
Błąd Odoo Related Field Error pojawia się wtedy, gdy pole zdefiniowane z atrybutem related= nie może poprawnie odwołać się do źródła podczas działania systemu. Zwykle wykrywa się go w logu serwera — potrafi zablokować formularze, zerwać obliczenia pól lub przerwać automatyczne procesy.
Pola related są wygodne, bo pozwalają pobierać wartość z innego modelu bez duplikowania danych. Gdy jednak łańcuch relacji jest niepoprawny lub źle skonfigurowany, Odoo zgłasza błędy walidacji lub wyjątki atrybutów.
Ten przewodnik wskazuje, dlaczego występują błędy związane z polami related i jak je naprawić bez ryzyka destabilizacji systemu.
Czym jest pole typu related w Odoo?
Pole related umożliwia odwołanie się do pola z innego modelu.
Przykład:
partner_email = fields.Char(
related="partner_id.email",
store=True
)
Co to oznacza:
- Model, w którym definiujesz to pole, ma pole relacyjne typu Many2one o nazwie partner_id,
- a wartość pola pochodzi z pola email w modelu res.partner,
i jeśli którykolwiek element tej ścieżki jest błędny, Odoo zgłosi błąd related field.
Najczęstsze przyczyny błędów z polami related w Odoo
1. Nieprawidłowa ścieżka relacji
Jeżeli w related= wskazano pole, które nie istnieje,
np. related="partner_id.non_existing_field",
system może przestać działać przy ładowaniu modułu lub podczas runtime.
2. Brak pola Many2one w modelu
Jeżeli partner_id nie jest zdefiniowane w modelu, a użyto go w related=, relacja nie zostanie rozwiązana.
3. Pole related bez store=True używane w domenach
Gdy pole related nie jest przechowywane, lecz używasz go w:
- kryteriach wyszukiwania,
- filtrach,
- grupowaniu,
może to prowadzić do niespodziewanych zachowań.
Przykład:
store=False
Jednak użycie go w wyszukiwaniach → może wywołać błędy.
4. Odwołania do pustych relacji
Jeśli partner_id jest puste, dostęp do partner_id.email w niektórych kontekstach może powodować problemy.
Choć Odoo radzi sobie z wieloma wartościami null, złożone łańcuchy relacji w niestandardowej logice mogą zawieść.
5. Niezgodność typów pól
Gdy typ pola related nie odpowiada typowi pola źródłowego,
Przykład:
np. partner_email = fields.Integer(related="partner_id.email"),
mamy do czynienia z błędami walidacji.
6. Zmiany struktury po aktualizacji modułu
Po aktualizacji modułu:
- nazwy pól mogą ulec zmianie,
- ścieżki relacji mogą przestać istnieć,
- zależności mogą się przesunąć,
a pola related są szczególnie wrażliwe na takie zmiany.
Jak naprawić błędy związane z polami related w Odoo
Krok 1 – Zweryfikuj ścieżkę relacji
Upewnij się, że cały łańcuch istnieje i jest poprawny:
related="partner_id.email"
Sprawdź, czy:
- pole partner_id istnieje w modelu,
- pole email istnieje w modelu docelowym,
Krok 2 – Sprawdź zgodność typów pól
Jeżeli pole źródłowe jest Char, pole related też powinno być Char.
Krok 3 – Ustaw store=True, gdy potrzeba
Jeżeli pole related jest używane w wyszukiwaniach lub raportach,
dodaj store=True,
w przeciwnym razie Odoo może wykazywać nieprzewidywalne zachowania w bardziej zaawansowanych zapytaniach.
Krok 4 – Sprawdź błędy ładowania modeli
Jeśli błąd pojawia się podczas instalacji modułu:
- zrestartuj serwer Odoo,
- zaktualizuj moduł,
- przeanalizuj traceback w logu,
Błędy related często ujawniają się podczas inicjalizacji modeli.
Krok 5 – Przejrzyj zależności po aktualizacji
Gdy problem pojawił się po:
- aktualizacji wersji Odoo,
- albo po aktualizacji modułu,
sprawdź, czy ścieżki relacji nadal istnieją i są kompatybilne.
Jak zapobiegać błędom related
- Trzymaj łańcuchy relacji krótkie i przejrzyste,
- unikaj głębokiego, zagnieżdżonego powiązania pól,
- zawsze dopasowuj typy pól,
- stosuj store=True jeśli pole bierze udział w domenach,
- testuj aktualizacje modułów na środowisku stagingowym,
Pola related dają dużo możliwości, ale stają się kruche, gdy modele ewoluują bez kontroli.
Jak Dasolo projektuje stabilne relacje między modelami
Błędy z polami related zwykle pojawiają się, gdy łańcuchy relacji rosną zbyt złożone lub gdy dziedziczenie modeli zmienia się bez spójnej aktualizacji powiązań.
Choć w logu serwera widoczny jest jedynie stacktrace, bardzo często oznacza on głębsze problemy konstrukcyjne w relacjach między modelami.
W Dasolo podchodzimy do problemów z polami related holistycznie — analizujemy cały łańcuch relacji, a nie tylko pojedyncze pole. Najczęstsze źródła problemów to:
- nieaktualne lub błędne odniesienia do pól,
- złożone hierarchie dziedziczenia,
- wielopoziomowe łańcuchy related,
- nieprawidłowe procedury przy aktualizacji modułów,
- rozbieżności kontekstu między firmami (cross-company).
Aby zachować stabilność na lata, kładziemy nacisk na jawne mapowanie relacji, kontrolowane rozszerzenia modeli i ograniczanie głębokości zależności. Przejrzysty design relacji zapobiega kaskadowym awariom i ułatwia utrzymanie kodu.
Podsumowanie
Błąd „Related Field Error” w Odoo występuje, gdy pole related nie potrafi poprawnie rozwiązać swojej referencji — zazwyczaj z powodu nieprawidłowych definicji modeli, konfliktów dziedziczenia lub brakujących zależności. Choć może wyglądać jak drobny błąd konfiguracji, jego przyczyna często tkwi w architekturze modułu.
Poprzez dokładne sprawdzenie łańcuchów relacji, weryfikację dziedziczenia modeli i dbanie o spójność pól podczas aktualizacji, programiści mogą wyeliminować ponawiające się problemy z related. Dobrze zaprojektowana architektura relacji nie tylko rozwiązuje ten błąd, ale też ułatwia rozwój i skalowanie systemu.
Dyscyplina w projektowaniu powiązań modeli sprawia, że Odoo działa przewidywalnie, jest łatwiejsze w utrzymaniu i odporniejsze na narastającą złożoność funkcjonalną.
Najczęściej zadawane pytania
Nie. Występują zarówno w Odoo 14, 15, 16, jak i 17.
Tak. Niezapisane (non-stored) pola related mogą spowalniać operacje na dużych zbiorach rekordów.
Nie — stosuj store=True tylko wtedy, gdy pole jest potrzebne do wyszukiwania, filtrowania lub raportowania.