Siirry sisältöön

Related Field Odoossa: Täydellinen Opas kehittäjille ja käyttäjille

Odoon Related-kentän käytännön opas: miten se toimii, milloin kannattaa käyttää ja miten määrittää Studiossa ja Pythonissa
6. maaliskuuta 2026 kirjoittanut
Related Field Odoossa: Täydellinen Opas kehittäjille ja käyttäjille
Dasolo
| Ei vielä kommentteja

Johdanto


Jos olet työskennellyt Odoon tietomallin parissa, olet varmasti törmännyt tilanteisiin, joissa haluat näyttää lomakkeella toisen mallin tiedon suoraan — ilman, että käyttäjän täytyy avata linkitettyä korttia. Related‑kenttä on Odoon tapa tuoda tämä tieto näkymään yksinkertaisella, deklaratiivisella tavalla.


Sen sijaan, että kirjoittaisit erillisen laskettavan kentän Python‑metodilla, Related‑kenttä seuraa olemassa olevaa relaatioketjua ja näyttää sen ketjun lopussa olevan kentän arvon. Se on yksi kehittäjän ja konsultin tehokkaimmista työkaluista, koska se tuo kontekstuaalista tietoa käyttöliittymään ilman koodirivejä.


Tässä oppaassa käydään läpi, mitä Related‑kenttä oikeastaan esittää, miten Odoo ORM käsittelee sitä, miten kentän voi luoda Studio‑työkalulla tai Python‑moduulilla sekä millaisiin liiketoimintatilanteisiin sitä kannattaa käyttää.

Mikä on Related‑kenttä Odoossa


Odoon ORM:n näkökulmasta Related‑kenttä ei ole erillinen perusdatatyyppi kuten Float tai Char, vaan pikemminkin oikotie: se paljastaa toisen mallin kentän arvon seuraamalla peräkkäisiä relaatioviittauksia. Lopullinen kenttätyyppi määräytyy sen mukaan, minkä tyyppiseen kenttään ketju päättyy.


Käytännön esimerkki: myyntitilauksella on partner_id (Many2one, joka viittaa res.partneriin). Jos määrittelet related='partner_id.country_id', myyntitilaukselle tulee näkyviin asiakkaan maa ilman, että arvoa kopioidaan erikseen tilausriveille.

Käyttäjän kannalta Related‑kenttä näyttää ja käyttäytyy kuten mikä tahansa muu kenttä näkymässä: jos päättyvä kenttä on teksti (Char), se renderöityy tekstikentäksi; jos se on Many2one, se näkyy valikkona; jos se on Boolean, se on valintaruutu. Kenttä perii visuaalisen esityksensä kohdekentästä.


Oletuksena Related‑kentät ovat vain luku‑tilassa ja niitä ei tallenneta tietokantaan. Tällöin ne näyttävät aina lähteen ajantasaisen arvon, mutta niitä ei voi suodattaa tai ryhmitellä SQL‑tasolla ennen kuin asetat store=True.


Odoo Studion kautta Related‑kenttä löytyy uuden kentän lisäysvalikosta. Valitset relaatiopolun vaihe vaiheelta, ja Studio luo kentän oikeilla asetuksilla — nopea keino konsultille lisätä kontekstia ilman koodausta.

Miten kenttä toimii


Kun Odoo lukee Related‑kenttää, se kulkee pisteillä erotellun kenttäketjun läpi. Jokaisen välivaiheen (paitsi viimeisen) on oltava relaatiokenttä: Many2one, One2many tai Many2many. Ketjun viimeinen kenttä voi olla mitä tahansa tyyppiä.


Alla näet yksinkertaisen esimerkin siitä, miten Related‑kenttä määritellään Python‑moduulissa:


from odoo import fields, models

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

    partner_country_id = fields.Many2one(
        related='partner_id.country_id',
        string='Customer Country',
        store=True,
    )

Tässä Odoo seuraa partner_id‑viitettä res.partner‑tietueeseen ja lukee sieltä country_id:n. Tuloksena myyntitilaukselle syntyy Many2one‑kenttä, joka peilaa asiakkaan maata.


Tallennettu vs. ei­tallennettu Related‑kenttä

Tämä ero on ratkaiseva. Oletuksena Related‑kenttä on store=False, eli sen arvo lasketaan lennosta aina, kun tietuetta luetaan. Arvoa ei säilytetä mallin tietokantataulussa.


Kun asetat store=True, Odoo kirjoittaa arvon tietokantaan aina kun lähdetieto muuttuu. Tämä tekee kentästä käytettävän suodatuksessa, ryhmittelyssä ja raporteissa, mikä lisää sen hyödyllisyyttä listanäkymissä ja analytiikassa.


Kompromissi on se, että tallennetut Related‑kentät vievät levytilaa ja aiheuttavat päivitystöitä, kun lähteen arvo muuttuu. Odoo hoitaa riippuvuuksien seurannan automaattisesti, mutta mallin, jossa on paljon tallennettuja kenttiä ja päivittyviä lähteitä, suorituskyky kannattaa arvioida huolella.


Luku‑tilassa vs. muokattavat Related‑kentät

Oletuksena Related‑kentät ovat readonly. Asettamalla readonly=False kentän voi tehdä muokattavaksi. Tällöin Odoo kirjoittaa muutoksen ketjun kautta takaisin lähdetietueeseen — eli muutos muuttaa alkuperäistä osallistuvaa tietuetta, ei paikallista kopiota.


Muokattavat Related‑kentät ovat voimakas ominaisuus, mutta voivat yllättää: jos toimit muokkaustilassa, varmista, että käyttäjät ymmärtävät tekevätkö he muutoksia ja mihin. Useimmiten tämä asetetaan vain, kun kirjoitusketjun vaikutus on tavoiteltu.


Tärkeimmät kenttäattribuutit

Alla ovat Related‑kentän yleisimmät asetukset, joita muokkaat määrittelyssä:

  • related: Pisteillä erotettu kenttäketju (esim. 'partner_id.country_id'). Tämä on ainoa pakollinen attribuutti.
  • store: Aseta True, jos haluat tallentaa arvon tietokantaan. Mahdollistaa suodatuksen ja ryhmittelyn.
  • readonly: Aseta False, jos haluat sallia kentän muokkauksen; muokkaus kirjoitetaan takaisin lähteeseen.
  • string: Käyttäjälle näkyvä otsikko. Jos jätät määrittelemättä, Odoo käyttää kohdekentän otsikkoa.
  • depends: Usein tarpeeton, sillä Odoo päättelee riippuvuudet related‑ketjusta automaattisesti. Tarvitaan harvoissa reunatapauksissa.

Miten se liittyy Odoo ORM:ään

Related‑kentän lukeminen palauttaa ketjun lopussa olevan kentän arvon. Jos jokin ketjun välivaihe on tyhjä (esim. partner_id ei ole asetettu), Related‑kenttä palauttaa False — normaalia ORM‑käyttäytymistä.


Kun Related‑kenttä on tallennettu, sitä voi käyttää domaineissa, näkymissä ja raporteissa normaalisti. Tallentamaton kenttä näkyy lomake‑ ja listanäkymissä, mutta SQL‑pohjaiset haut ja ryhmittelyt eivät toimi sillä ilman serverin puoleista Python‑evaluointia.

Liiketoiminnan käyttötapaukset


Related‑kenttiä käytetään laajasti eri Odoo‑osissa. Seuraavassa viisi konkreettista esimerkkiä liiketoimintatarpeista.


CRM ja myynti: asiakaspuh. myyntitilauksella

Myyntihenkilöstö haluaa usein nähdä asiakkaan puhelinnumeron suoraan myyntitilaukselta, ilman, että täytyy avata asiakaskorttia. Related‑kenttä related='partner_id.phone' tuo numeron näkymään kontekstissa, nopeuttaa yhteydenottoja ja vaatii vain muutaman klikkauksen Studion kautta.


Kirjanpito: yrityksen valuutta laskuriveillä

Moniyritysympäristössä kirjanpitäjät saattavat haluta näyttää laskuriveillä yrityksen valuutan selkeyden vuoksi. Related‑kenttä like related='move_id.company_id.currency_id' kulkee kahden Many2one‑kentän läpi ja tuo valuutan näkyviin. Vaikka pidemmät ketjut ovat mahdollisia, suositeltavaa on pitää ketjut lyhyinä suorituskyvyn ja ylläpidettävyyden takia.


Varasto: tuoteluokka varastosiirtoriveillä

Varastohenkilöstö haluaa usein nähdä tuotteen kategorian ilman, että avaa tuotetietuetta. Related‑kenttä product_id.categ_id stock.move.line‑mallissa tuo kategorian näkyviin ja store=True avulla voit ryhmitellä liikkeitä tuoteryhmän mukaan varastoraporteissa.


Valmistus: sisäinen tuotenumero työjonon komponenteissa

Tuotannon puolella työnjohtajat hyötyvät siitä, että komponenttiriveillä näkyy tuotteen sisäinen koodi. Related‑kenttä product_id.default_code mrp.workorder‑riveillä vähentää virhevalintoja ja parantaa koko tuotantolinjan tarkkuutta.


Työajat ja projektit: työntekijän osasto

Projektipäälliköt saattavat tarvita työntekijän osastotiedon tuntikirjauksissa kustannuslaskentaa varten. Related‑kenttä employee_id.department_id account.analytic.line‑mallissa näyttää osaston suoraan tuntirivillä ja store=True mahdollistaa suodatuksen projektianalyysissä.

Related‑kentän luominen ja muokkaus


Related‑kentän lisäämiseen on kolme käytännöllistä tapaa riippuen ympäristöstäsi ja käyttötapauksesta.


Odoo Studio (ei koodia)

Studio antaa mahdollisuuden lisätä Related‑kenttiä ilman Pythonia. Näin se tehdään:

  1. Avaa Odoo Studio päävalikosta.
  2. Siirry lomakkeeseen, johon haluat lisätä kentän.
  3. Valitse Lisää kenttä ja sen jälkeen Related Field.
  4. Valitse relaatiopolku klikkaillen läpi saatavilla olevia kenttiä.
  5. Anna kentälle nimi ja valitse, tallennetaanko se ja onko se muokattava.
  6. Tallenna ja sulje Studio.

Studio luo kentän x_studio_‑etuliitteellä ja lisää sen näkymään. Tämä on helppo ja nopea tapa lisätä kontekstuaalista tietoa ilman, että tarvitset päivityksiä tietokantaan käsin.


Python‑moduuli (koodilla)

Kehittäjäympäristössä Related‑kenttä määritellään malliluokassa. Tämä on suositeltava tapa muutoksille, jotka vaativat versionhallintaa ja monen ympäristön hallintaa:


from odoo import fields, models

class StockMoveLine(models.Model):
    _inherit = 'stock.move.line'

    product_category_id = fields.Many2one(
        related='product_id.categ_id',
        string='Product Category',
        store=True,
    )

Määriteltyä kenttää lisätään käyttöliittymään XML‑näkymässä, ja Odoo huolehtii tietokantapilarin luomisesta moduulin asennuksen tai päivityksen yhteydessä. Tämä on vakiotapa hallittuun, ylläpidettävään kustomointiin.


XML‑RPC API:n kautta

Ohjatun ja automatisoidun käyttöönoton tapauksissa Related‑kenttiä voi luoda myös XML‑RPC‑kutsuin asettamalla field‑määritykseen related‑attribuutin:

field_id = models.execute_kw(
    ODOO_DB, uid, ODOO_API_KEY,
    'ir.model.fields', 'create',
    [{
        'name': 'x_partner_country_id',
        'field_description': 'Customer Country',
        'model_id': sale_order_model_id,
        'ttype': 'many2one',
        'relation': 'res.country',
        'related': 'partner_id.country_id',
        'store': True,
        'readonly': True,
        'state': 'manual',
    }]
)

API‑luonnissa sinun pitää määritellä ttype ja relation käsin, koska RPC‑kutsu ei päättele ketjun lopullista tyyppiä kuten Python ORM tekee. Tämä tapa sopii automatisoituihin asennuksiin ja etähallintaan.

Hyvät käytännöt


1. Tallenna kenttä, jos aiot suodattaa tai ryhmitellä sen perusteella

Jos käyttäjät haluavat suodattaa listaa tai ryhmitellä pivotissa Related‑kentän mukaan, aseta store=True. Muuten Odoo ei pysty tekemään SQL‑hakua kentän perusteella ja joudut riskeeraamaan skaalausongelmia. Näyttökenttiin unstored riittää.


2. Pidä ketju mahdollisimman lyhyenä

Kaksi tasoa kuten partner_id.country_id on selkeä ja suorituskykyinen. Hyvin syvät ketjut lisäävät virhepisteitä ja ylläpitokustannuksia. Jos ketju alkaa venyä, harkitse laskettavaa kenttää, jossa logiikka on hallitumpaa.


3. Tiedä mitä readonly=False todella tekee

Muokattava Related‑kenttä ei luo paikallista kopiota vaan muuttaa alkuperäistä tietuetta. Jos teet partner_id.phone muokattavaksi tilaukselta, päivitys päivittää partner‑tietuetta ja vaikuttaa kaikkiin sen linkitettyihin dokumentteihin. Varmista, että liiketoiminta hyväksyy tämän.


4. Käytä Related‑kenttiä näyttöön, älä tiedon duplikaatioon

Related‑kentän tarkoitus on tuoda olemassa oleva tieto kontekstiin, ei luoda irrallista kopiota, joka voi poiketa lähteestä. Jos tarvitset itsenäisen arvon, käytä tavallista kenttää ja aseta arvo vaikkapa onchange‑logiikalla tai automatisoidulla toiminnolla.


5. Tarkista käyttöoikeudet

Related‑kenttä lukee toisen mallin läpi. Jos käyttäjällä ei ole lukuoikeutta ketjun malleihin, kenttä voi palauttaa tyhjän arvon. Tämä voi hämmentää käyttäjiä, joten suunnittele kentät siten, että oikeudet vastaavat odotettua näkymää.

Yleisiä sudenkuoppia


Suodatus tallentamattomalla Related‑kentällä

Yleisin virhe on lisätä Related‑kenttä listaan ja yrittää suodattaa sillä, vaikka store=False. Tällöin Odoo ei pysty tekemään hakua tietokannassa ja domain voi johtaa virheeseen tai tyhjiin tuloksiin. Lisää store=True kaikkiin kenttiin, joita aiot käyttää domain‑suodattimissa ja group‑by‑toiminnoissa.


Odottamaton kirjoittaminen lähteeseen

Kun teet Related‑kentästä muokattavan, monet yllättyvät siitä, että muutos vaikuttaa lähdetietueeseen — erityisesti Studio‑muutoksissa. Ennen kuin sallitte muokkauksen, varmista liiketoimintavaatimukset ja käyttäjäviestintä.


Välivaiheiden tyhjien arvojen käsittely

Jos jokin ketjun kenttä on tyhjä, Related‑kenttä palauttaa False ja näkymässä kenttä jää tyhjäksi. Kun luet kenttää Pythonissa tai käytät sitä laskennassa, käsittele False‑tapaus estääksesi virheitä, joita ei aina näy testidatassa.


Kun laskettu kenttä olisi parempi

Related‑kenttä toimii hyvin suoran kenttäpeilauksen tapauksiin. Jos tarvitset muunnoksia, ehtoja tai loogista käsittelyä arvon suhteen, tee laskettu (computed) kenttä Python‑metodilla. Kohtuuton yritys pakata logiikkaa related‑ketjuun johtaa ylläpidon vaikeutumiseen.


Suorituskykyongelmat useilla tallennetuilla kentillä suuressa mallissa

Jokainen tallennettu Related‑kenttä vaatii päivityksen, kun lähde muuttuu. Jos lisäät kymmeniä tallennettuja kenttiä malliin, jolla on satojatuhansia rivejä ja usein päivittyvät lähteet, kuormitus voi kasvaa merkittävästi. Suunnittele ja profiloi suurissa ympäristöissä, ja käytä unstored‑kenttiä, jos reaaliaikainen tarkkuus ei ole kriittinen.

Yhteenveto


Related‑kenttä on käytännöllinen työkalu Odoossa, kun haluat tuoda kontekstuaalista tietoa ilman, että kopioit dataa. Se mahdollistaa relaatioketjun seuraamisen ja linkitetyn kentän arvon näyttämisen suoraan missä tahansa näkymässä, ja tarvittaessa myös tallentamisen raportointia varten.


Kun tiedät, milloin valita store=True, milloin sallia readonly=False ja kuinka käsitellä tyhjiä välivaiheita, vältät yleisimmät tietoriskit. Olitpa kehittäjä, konsultti tai tekninen vetäjä, Related‑kentän tuntemus kannattaa ottaa osaksi Odoo‑työkalupakkiasi.

Jos rakennat tai laajennat Odoon tietomallia, Related‑kentät kuuluvat samaan työkalusarjaan laskettujen kenttien, Many2one‑kenttien ja muiden perustyyppien kanssa.

Me Dasololla autamme yrityksiä ottamaan Odoon käyttöön, räätälöimään ja optimoimaan prosessejaan myynnistä operaatioihin ja kirjanpitoon. Autamme suunnittelemaan tietomalleja, lisäämään tarpeellisia kenttiä ja kirjoittamaan ylläpidettävää koodia. Ota yhteyttä niin keskustellaan, miten voimme tukea Odoo‑projektiasi.

Related Field Odoossa: Täydellinen Opas kehittäjille ja käyttäjille
Dasolo 6. maaliskuuta 2026
Jaa tämä kirjoitus
Kirjaudu sisään jättääksesi kommentin