Johdanto
Odoo‑ympäristössä related‑kenttävirhe syntyy, kun kenttä joka on määritelty related‑attribuutilla ei kykene hakemaan tai välittämään arvoa ajon aikana. Virheilmoitukset näkyvät usein palvelimen lokeissa ja voivat rikkoa lomakkeiden näkymiä, laskettuja kenttiä tai taustaprosesseja.
Related‑kentät ovat hyödyllisiä, koska ne peilaavat arvoja toisesta mallista ilman tietojen kopiointia. Jos kuitenkin viittausketju on väärin tai konfiguroitu huolimattomasti, Odoo nostaa validointi‑ tai attribuuttivirheitä.
Tässä ohjeessa käydään läpi, miksi related‑kenttävirheitä syntyy ja miten ne korjataan turvallisesti ja pysyvästi.
Mikä on 'related'‑kenttä Odoossa?
Related‑kentän idea on yksinkertainen: se osoittaa toisen mallin kenttään ja antaa sen arvon käyttötarkoitukseen nykyisessä mallissa.
Esimerkin tasolla
partner_email = fields.Char(
related="partner_id.email",
store=True
)
Käytännössä tämä tarkoittaa
- Nykyisellä mallilla on Many2one‑viite partner_id:hen
- Kenttä heijastaa res.partner‑mallin email‑arvoa
Jos viittausketjun osa puuttuu tai on virheellinen, Odoo nostaa related‑kenttävirheen.
Tyypilliset syyt related‑kenttävirheisiin Odoossa
1. Virheellinen viittausketju
Yleisintä on, että polku osoittaa olemattomaan kenttään tai malliin:
related="partner_id.non_existing_field"
Tässä tapauksessa moduulin lataus tai ajo voi kaatua.
2. Puuttuva Many2one‑suhde
Jos partner_id‑kenttää ei ole määritelty, related‑määrittely ei voi ratkaista viitettä.
3. Tallentamaton related‑kenttä mutta käytetty hakuissa
Jos related‑kenttiä ei ole merkitty store=True:ksi, mutta sitä käytetään:
- hakuehdoissa
- suodattimissa
- ryhmittelyissä
se voi johtaa odottamattomaan käyttäytymiseen tai virheisiin.
Esimerkin tasolla
store=False
Mutta käytetään hakuihin → voi aiheuttaa ongelmia.
4. Null‑suhteisiin pääsy
Jos partner_id on tyhjä, partner_id.email:n lukeminen voi joskus aiheuttaa virheitä tietyissä konteksteissa.
Odoo käsittelee useimmat null‑arvot sujuvasti, mutta räätälöidyissä ketjuissa voi syntyä vikatilanteita.
5. Kenttätyyppien yhteensopimattomuus
Jos related‑kentän tyyppi ei vastaa lähdekentän tyyppiä:
Esimerkin tasolla
partner_email = fields.Integer(related="partner_id.email")
Tyyppivirheet johtavat validointivirheisiin.
6. Modulipäivitykset muuttavat kenttärakennetta
Moduulia päivitettäessä voi tapahtua:
- kenttien nimet muuttuvat
- viittauspolut rikkoutuvat
- riippuvuudet muuttuvat
Related‑kentät ovat herkkiä rakenteellisille muutoksille.
Miten korjata related‑kenttävirheitä
Vaihe 1 – Varmista viittauspolun oikeellisuus
Tarkista, että koko ketju on olemassa ja oikeassa muodossa:
related="partner_id.email"
Varmista erityisesti, että:
- partner_id on määritelty
- email on olemassa kohdemallissa
Vaihe 2 – Varmista kenttätyyppien yhteensopivuus
Lähdekentän ja related‑kentän tyypin tulee vastata toisiaan (esim. Char → Char).
Vaihe 3 – Käytä store=True kun tarvitaan
Jos related‑kenttää käytetään hakuihin, raporteissa tai suodattimissa, merkitse se tallennettavaksi:
store=True
Muuten Odoo voi käyttäytyä odottamattomasti monimutkaisissa hauissa.
Vaihe 4 – Tarkista moduulin latauslokit
Jos virhe näkyy moduulin asennuksen aikana:
- Käynnistä Odoo uudelleen
- Päivitä moduuli
- Tutki traceback‑lokit huolellisesti
Related‑kenttävirheet ilmaantuvat usein mallien alustuksessa.
Vaihe 5 – Tarkista riippuvuudet päivityksen jälkeen
Jos virhe ilmestyi päivityksen jälkeen:
- Odoo‑version päivitys
- räätälöidyn moduulin päivitys
Varmista, että viittauspolut ovat edelleen voimassa.
Miten estää related‑kenttävirheitä ennakolta
- Pidä viittausketjut lyhyinä ja selkeinä
- Vältä syviä, monitasoisia related‑ketjuja
- Varmista kenttätyyppien yhdenmukaisuus
- Käytä store=True kun kenttä on osa hakuja tai raportteja
- Testaa moduulipäivitykset staging‑ympäristössä
Related‑kentät ovat tehokkaita mutta haavoittuvia, kun mallit muuttuvat ajan myötä.
Miten Dasolo suunnittelee luotettavia relaatiomalleja
Usein related‑kenttävirheet tulevat esiin, kun relaatioketjut monimutkaistuvat tai periytyvät mallit muuttuvat ilman yhdenmukaistusta.
Vaikka virhe saattaakin näkyä yksinkertaisena traceback‑rivikoodina palvelinlokissa, se kertoo usein syvemmästä rakenteellisesta epäjohdonmukaisuudesta mallien suhteissa.
Dasololla lähestymme related‑kenttäongelmia laaja‑alaisesti: emme korjaa vain yksittäistä kenttää vaan tarkistamme koko relaatioketjun ja malliperimän. Yleisiä syitä ovat:
- vanhentuneet tai virheelliset kenttäviittaukset
- monimutkaiset perintähierarkiat
- monitasoiset related‑ketjut
- huonosti hallitut modulipäivitykset
- yrityskohtaiset kontekstierot (cross‑company) aiheuttavat ristiriitoja
Pitkän aikavälin vakauden saavutamme selkeällä relaatiokartoituksella, hallituilla laajennuksilla ja matalalla riippuvuusluvulla. Siisti relaatiodesign estää ketjureaktioita ja helpottaa ylläpitoa räätälöidyissä moduuleissa.
Yhteenveto
Odoossa 'Related Field Error' syntyy, kun related‑kenttä ei pysty ratkaisemaan viitettä oikein — usein taustalla on virheelliset mallimäärittelyt, perintäkonfliktit tai puuttuvat riippuvuudet. Alkuun virhe voi näyttää konfiguraatiovirheeltä, mutta usein syy on arkkitehtonisessa ristiriidassa.
Käymällä läpi relaatioketjut, varmistamalla malliperinnän johdonmukaisuuden ja pitämällä viitatut kentät yhdenmukaisina päivitysten yli, kehittäjät voivat poistaa toistuvat related‑virheet. Selkeä relaatiorakenne korjaa virheen lisäksi parantaa järjestelmän ymmärrettävyyttä ja skaalautuvuutta.
Kurinomainen tapa mallien suhteiden hallintaan tekee Odoosta ennustettavamman, helpommin ylläpidettävän ja vakaamman, kun liiketoimintalogiikka monimutkaistuu.
Usein kysyttyä
Ei. Ne esiintyvät yleisesti Odoo 14:stä aina 17:ään asti.
Kyllä. Tallentamattomat related‑kentät (store=False) voivat hidastaa suurten tietojoukkojen käsittelyä.
Ei. Merkitse store=True vain silloin kun kenttää tarvitaan hakuun, suodatukseen tai raportointiin.