Siirry sisältöön

Peritytöt Odoossa: Kuinka ORM Jakaa Tietoa Mallien Kesken

Käytännön opas kenttäperinnön ymmärtämiseen Odoossa ja sen käyttöön mukautuksissasi
6. maaliskuuta 2026 kirjoittanut
Peritytöt Odoossa: Kuinka ORM Jakaa Tietoa Mallien Kesken
Dasolo
| Ei vielä kommentteja

Johdanto


Kun aloitat Odoo-kehityksen, yksi käsite nousee esiin yhä uudelleen: perintö. Odoon ORM perustuu ajatukseen, että mallit voivat laajentaa, jakaa ja käyttää toistensa kenttiä ilman, että tietoja kopioidaan tai kirjoitetaan tarpeetonta koodia.


Perityt kentät ovat keskeisiä tälle järjestelmälle. Ne ovat tapa, jolla Odoo sallii mallin läpinäkyvästi käyttää ja altistaa kenttiä, jotka on fyysisesti määritelty ja tallennettu toiseen malliin. Kun ymmärrät tämän mekanismin, monet asiat Odoon tietomallissa alkavat olla järkeviä.


Tämä opas selittää, mitä perityt kentät ovat, kolme malliperinnön tyyppiä, jotka tuottavat niitä, kuinka ne käyttäytyvät tietokannassa ja kuinka voit käyttää niitä oikeissa Odoo-mukautusprojekteissa.

Mikä on peritty kenttä Odoossa?


Odoon ORM-kehyksessä kenttä katsotaan perityksi, kun malli saa pääsyn eri mallissa määriteltyihin kenttiin yhden kolmen tuetun perintömekanismin kautta. Sen sijaan, että määriteltäisiin nämä kentät alusta alkaen, lapsimalli yksinkertaisesti käyttää niitä uudelleen.


Tämä on osa sitä, mikä tekee Odoo-tietomallista niin kompaktin ja johdonmukaisen. Sama name kenttä kumppanirekisterissä näkyy myyntitilauksissa, CRM-liideissä ja laskuissa, koska kaikki nämä mallit lukevat lopulta samasta lähteestä.


Kolme perintötyyppiä Odoossa

Odoo tukee kolmea erilaista malliperintöä, ja jokainen käsittelee kenttiä eri tavalla.

1. Klassinen perintö

Tämä on yleisin malli Odoo-kehityksessä. Käytät _inherit ilman uuden _name määrittämistä. Tämä laajentaa olemassa olevaa mallia suoraan, lisäten siihen uusia kenttiä tai metodeja. Uutta tietokantataulua ei luoda. Uudet kentät näkyvät yksinkertaisesti alkuperäisessä mallissa.


Näin useimmat Odoo-moduulit lisäävät kenttiä vakiomalleihin. Jos asennat CRM-moduulin, se lisää kenttiä res.partner -malliin klassisen perinnön kautta. Nämä kentät tallennetaan kumppanitauluun ydinkenttien rinnalle.


2. Prototyyppiperintö

Tämä tapahtuu, kun yhdistät _inherit ja _name yhdessä. Uusi malli alkaa vanhemman mallin rakenteen kopiosta, mutta saa oman tietokantataulunsa. Kaikki vanhemman kentät kopioidaan uuteen malliin. Muutokset lapsimallissa eivät vaikuta vanhempaan.


Tätä mallia käytetään harvemmin jokapäiväisessä mukautuksessa, mutta sitä käytetään täysin uusien mallien luomiseen, jotka jakavat olemassa olevan rakenteen.


3. Delegointiperintö

Tämä on kaikkein erottuvin tyyppi, joka määritellään käyttämällä _inherits. Lapsimalli linkittää vanhempaan malliin Many2one-kentän kautta. Lapsimalli altistaa sitten läpinäkyvästi kaikki vanhemman kentät ikään kuin ne olisivat sen omia. Tiedot sijaitsevat vanhemman taulussa, ei lapsen taulussa.

Tämä on se, mitä useimmat kehittäjät tarkoittavat puhuessaan perityistä kentistä tiukassa mielessä. Kenttiä ei kopioida. Niihin päästään käsiksi suhteellisen linkin kautta lukemisen ja kirjoittamisen aikana.


Tunnetuin esimerkki standardi Odoosta on suhde res.users ja res.partner välillä. Jokainen käyttäjä on myös kumppani. Käyttäjän nimi, sähköposti ja puhelinnumero tallennetaan kumppanirekisteriin ja käyttäjä pääsee niihin käsiksi delegointiperinnön kautta.

Kuinka kenttä toimii


Delegointiperintö taustalla

Kun malli käyttää _inherits, Odoon ORM luo läpinäkyvän sillan kahden tietokantataulun välille. Kun luet perittyä kenttää lapsirekisteristä, Odoo seuraa automaattisesti Many2one-linkkiä vanhempaan rekisteriin ja palauttaa siellä tallennetun arvon.


Kun kirjoitat perittyyn kenttään lapsimallista, Odoo kirjoittaa suoraan vanhempaan rekisteriin. Kehittäjän näkökulmasta kenttä tuntuu alkuperäiseltä. Tietokannan näkökulmasta tiedot sijaitsevat vanhempien taulussa.


Tällä on tärkeä seuraus: tietoja ei kopioida. Jos päivität kumppanin nimen, muutos heijastuu välittömästi kaikkialla, missä kumppania viitataan, mukaan lukien käyttäjärekisterissä, joka perii siitä.


Klassinen perintö ja tietokanta

Klassisessa perinnössä uusia kenttiä lisätään alkuperäisen mallin tietokantatauluun. Toista taulua ei ole mukana. Laajennettu malli ja alkuperäinen malli ovat sama asia tietokannassa. Tämä on puhtain ja yleisin tapa lisätä kenttiä Odoo-kustomointiprojekteissa.


Liitetyt kentät kevyenä perintönä

related kenttä on erityinen tyyppi laskennallisesta kentästä Odoo ORM:ssä, joka lukee arvon linkitetyltä rekisteriltä suhteellisten kenttien ketjun kautta. Se ei ole tiukasti sama kuin malliperintö, mutta sitä käytetään usein perityntyyppisten tietojen esittämiseen mallissa ilman mallin rakenteen muuttamista.


Esimerkiksi voit määrittää partner_country_id kentän myyntitilaukselle, joka lukee partner_id.country_id. Kenttä käyttäytyy kuin alkuperäinen kenttä myyntitilauksessa, mutta arvo tulee kumppanilta.

Liitetyt kentät voidaan valinnaisesti tallentaa tietokantaan store=True -asetuksella, mikä parantaa hakujen ja suodattimien suorituskykyä, mutta lisää tallennuskustannuksia ja vaatii uudelleenlaskentaa, kun lähde muuttuu.


Kuinka kentät ratkaistaan ajonaikaisesti

Kun Odoo lataa mallin määritelmän, se ratkaisee koko kenttäkartoituksen, mukaan lukien kaikki perityt kentät. Ennen kuin malli on valmis käytettäväksi, Odoo on jo kartoittanut jokaisen käytettävissä olevan kentän sen lähteeseen, olipa se sitten mallin oma taulu, vanhemman taulun kautta delegoinnin avulla tai liittyvän ketjun kautta. Tämä ratkaisu tapahtuu kerran palvelimen käynnistyksen yhteydessä ja se välimuistitetaan suorituskyvyn parantamiseksi.

Liiketoimintakäyttötapaukset


Perityt kentät eivät ole vain tekninen käsite. Ne ratkaisevat todellisia liiketoimintaongelmia pitämällä tiedot johdonmukaisina eri Odoo-osissa ilman päällekkäisyyksiä.


1. CRM ja myynti: Yhteystiedot

Kun myyjä luo liidin CRM-moduulissa, asiakastiedot, puhelinnumero ja sähköpostiosoite tulevat kumppanitiedosta Many2one-linkin kautta. Jos kumppanin tiedot muuttuvat, jokainen liidi, tarjous ja tilaus, joka on linkitetty kyseiseen kumppaniin, heijastaa päivityksen välittömästi.


Tämä on klassista perintöä ja liittyviä kenttiä, jotka toimivat yhdessä. CRM-moduuli laajentaa res.partner CRM-spesifisillä kentillä (kuten liidien määrä ja mahdollisuuden vaihe), ja myyntitilaukset tuovat esiin kumppanin yhteystiedot liittyvien kenttien kautta.


2. Tuotteet ja variantit

Odoon tuotemalli käyttää delegointiperintöä käsitelläkseen tuotevariantteja siististi. product.product malli (erityinen variantti) käyttää _inherits linkittääkseen product.template -malliin. Kentät, jotka ovat yhteisiä kaikille varianteille, kuten tuotteen nimi, kategoria, myyntihinta ja kuvaus, sijaitsevat mallissa. Variantti-spesifiset kentät, kuten viivakoodi tai sisäinen viite, sijaitsevat itse varianttitiedostossa.


Tämä suunnittelu tarkoittaa, että voit olla 50 värivarianttia paidasta, jotka kaikki jakavat saman nimen ja kuvauksen, ilman että näitä arvoja tallennetaan 50 kertaa tietokantaan.


3. Käyttäjät ja kumppanit

Jokainen Odoo-käyttäjä on myös yhteystieto. res.users malli käyttää _inherits = {'res.partner': 'partner_id'}, mikä tarkoittaa, että käyttäjä perii automaattisesti kaikki kumppanikentät, mukaan lukien nimi, sähköposti, puhelin, osoite ja profiilikuva. Kun päivität työntekijän sähköpostiosoitteen, se päivittyy sekä käyttäjäasetuksissa että yhteystietoluettelossa samanaikaisesti.


4. Varasto: Varastosiirrot ja tuoteinfo

Varastomoduulin varastosiirto rivit näyttävät tuotteen kuvaukset, jotka tulevat tuotemallista kautta liittyvien kenttien ketjun. Varastopäälliköt näkevät tarkat, ajantasaiset tuote tiedot suoraan keräyslistoissaan ilman, että varastomoduulin tarvitsee kopioida tuotedataa.


5. Kirjanpito: Laskurivit

Tilisiirto rivit viittaavat tuotteisiin ja kumppaneihin. Laskurivillä näkyvät tuotteen nimi, tilikoodit ja verokokoonpanot nousevat esiin tuotteen ja kumppanimallien kautta suhteellisten linkkien ja liittyvien kenttien kautta. Kirjanpitäjät näkevät johdonmukaista dataa, joka vastaa sitä, mitä myyntitiimit ovat määrittäneet tuotteelle, koska he lukevat samasta lähteestä.

Perittyjen kenttien luominen tai mukauttaminen


Odoo Studion käyttäminen

Odoo Studio on kooditon käyttöliittymä Odoo-mallien ja -näkymien mukauttamiseen. Studiosta voit lisätä uusia kenttiä mihin tahansa malliin ilman Python-koodin kirjoittamista. Se, mitä Studio tekee taustalla, on klassinen perintö: se laajentaa mallia lisäämällä uuden kentän sen määritelmään.


Studio mahdollistaa myös liittyvien kenttien luomisen. Kun valitset "Liittyvä kenttä" kenttätyypiksi, voit osoittaa mihin tahansa kenttään, joka on saatavilla suhteellisen ketjun kautta nykyisestä mallista. Esimerkiksi myyntitilausmallissa voit luoda liittyvän kentän, joka lukee asiakkaan maan tai ALV-numeron suoraan kumppanitiedoista.


Useimmille liiketoimintakäyttäjille ja toiminnallisille konsultteille Studio on oikea työkalu kenttien lisäämiseen Odoo:hon. Se hoitaa kenttien nimeämisen, tietokannan migraation ja näkymän sijoittamisen automaattisesti.


Tekninen mukauttaminen Pythonilla

Odoo-moduuleja rakentaville kehittäjille perityt kentät määritellään Pythonissa käyttäen models.Model -luokkaa Odoo ORM:stä.


Klassinen perintö mukautetun kentän lisäämiseksi olemassa olevaan malliin:

class CrmLead(models.Model):
    _inherit = 'crm.lead'

    x_contract_value = fields.Float(
        string='Arvioitu sopimusarvo'
    )

Delegointiperintö uuden mallin luomiseksi, joka jakaa kenttiä olemassa olevasta:

class EmployeeProfile(models.Model):
    _name = 'hr.employee.profile'
    _inherits = {'res.partner': 'partner_id'}

    partner_id = fields.Many2one(
        'res.partner',
        required=True,
        ondelete='cascade'
    )
    employee_id = fields.Many2one(
        'hr.employee',
        string='Employee'
    )

Liittyvät kentät arvon esittämiseksi linkitetyssä tietueessa:

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

    partner_country_id = fields.Many2one(
        related='partner_id.country_id',
        string='Asiakkaan maa',
        store=True
    )

XML-RPC API:n kautta (Etäkonfigurointi)

Kenttiä voidaan myös lisätä ohjelmallisesti Odoo'n XML-RPC API:n ja ir.model.fields -mallin avulla. Tämä on lähestymistapa, jota käytetään Dasolon etäkonfigurointimuistioissa. Se on verrattavissa siihen, mitä Studio tekee, ja se mahdollistaa kenttien luomisen ilman suoraa palvelin pääsyä.


Lisätäksesi liittyvän kentän API:n kautta, luot ir.model.fields -tietueen, jossa ttype='many2one' (tai sopiva tyyppi) ja asetat related -parametrin määrittämään suhteellisen polun. Tämä lähestymistapa sopii hyvin mukautettujen kenttien käyttöönottoon osana automatisoitua asennusprosessia.

Parhaat käytännöt


Valitse oikea perintötyyppi työhön

Käytä klassista perintöä, kun haluat yksinkertaisesti lisätä kenttiä tai metodeja olemassa olevaan malliin. Se on yksinkertaisin lähestymistapa ja mitä suurin osa Odoo-moduuleista käyttää. Varaa delegointiperintö tapauksille, joissa tarvitset todella kahta erillistä tietuetta, jotka on linkitetty yhteen, kuten kun liiketoimintakäsite laajentaa yhteystietoa olematta itse yhteystieto.


Suosi liittyviä kenttiä lukemiseen

Jos tarvitset vain näyttää arvon linkitetyssä tietueessa lomakkeella tai luettelonäkymässä, liittyvä kenttä on siistimpi kuin delegointiperintö. Se välttää uuden rakenteellisen riippuvuuden luomisen ja on helppo ymmärtää ja ylläpitää.


Ole varovainen store=True liittyvillä kentillä

Liittyvän kentän tallentaminen tietokantaan nopeuttaa hakuja ja suodattimia, mutta se tarkoittaa, että arvo on kopio. Odoo laukaisee uudelleenlaskennan, kun lähde muuttuu, mutta äärimmäisissä tapauksissa tämä voi mennä epäsynkroniin. Tallenna liittyviä kenttiä vain, kun tarvitset todella suodattaa tai lajitella niitä suuressa mittakaavassa.


Aina etuliite mukautetuille kentille x_

Mikä tahansa kenttä, jonka lisäät standardiin Odoo-malliin perinnön kautta, tulisi aloittaa x_:lla (tai käyttää moduulin nimeä oikeassa moduulissa). Tämä estää ristiriidat Odoon tulevissa versioissa lisäämien kenttien kanssa.


Dokumentoi perintöketjusi

Kun työskentelet monimutkaisissa mukautuksissa, kirjoita lyhyt kommentti tai suunnittelumuistio, joka selittää, mistä kentät tulevat ja miksi. Kenttä nimeltä x_country_code myyntitilauksessa ei välttämättä liity ilmeisesti partner_id.country_id.code:hen ilman dokumentaatiota.


Käsittele kaskadipoistoja oikein

Delegointiperinnössä vanhempirekisteri luodaan automaattisesti, kun lapsi luodaan. Kun lapsi poistetaan, vanhempi tulisi yleensä myös poistaa. Aseta ondelete='cascade' Many2one:lle _inherits:ssa varmistaaksesi puhtaan poistamisen ilman orpoja rekistereitä.


Yleiset sudenkuopat


Kolmen perintötyypin sekoittaminen

Yleisin virhe Odoon uusilla kehittäjillä on käyttää _inherit _name:n kanssa, kun he tarkoittivat klassista laajennusta. Tämä luo vahingossa täysin uuden mallin sen sijaan, että laajentaisi olemassa olevaa. Tarkista mallin määritelmäsi: jos et aio luoda uutta mallia, jätä _name pois.


Unohtaminen luoda vanhempirekisteri _inherits:ssä

Delegointiperinnössä vanhempirekisteri ei luo itseään automaattisesti kaikissa skenaarioissa. Kun luot lapsirekisterin ohjelmallisesti API:n kautta tai skriptissä, sinun on joko annettava Odoon ORM:n käsitellä vanhemman luonti (mikä tapahtuu, kun käytät create:a normaalisti) tai luotava vanhempirekisteri ensin ja annettava sen ID. Tämän vaiheen ohittaminen johtaa tietokannan rajoitevirheeseen.


Yrittäminen muuttaa kentän tyyppiä perinnön kautta

Odoo ei salli olemassa olevan kentän tyypin ylittämistä perinnön kautta. Voit muuttaa attribuutteja, kuten merkkijonon etiketti, domain tai aputeksti, mutta et voi muuttaa Char-kenttää Integer-kentäksi. Tämän yrittäminen aiheuttaa moduulin asennusvirheen.


Liiallinen tallennettujen liittyvien kenttien käyttö

On houkuttelevaa lisätä store=True jokaiseen liittyvään kenttään suorituskykysyistä, mutta se lisää tietokannan kokoa ja tuo mukanaan ylläpitokustannuksia. Jos lähdekenttä muuttuu usein, tallennetut liittyvät kentät aiheuttavat paljon uudelleenlaskentaa. Käytä tallennettuja liittyviä kenttiä valikoivasti, vain kun sinulla on konkreettinen tarve suodattaa tai ryhmitellä niitä suurissa tietoaineistoissa.


Oletetaan, että perityt kentät kunnioittavat lapsimallin käyttöoikeussääntöjä

Delegoinnin kautta perityt kentät sijaitsevat vanhemmassa mallissa. Lapsimallissa määritellyt käyttöoikeudet eivät automaattisesti päde näihin kenttiin tietokannan tasolla. Jos rajoitat pääsyä lapsimalliin mutta et vanhempaan, käyttäjät voivat silti lukea perittyjen kenttien arvot suoraan vanhemman mallin kautta. Tarkista aina turvallisuussäännöt molemmille malleille käytettäessä delegointiperintöä.

Yhteenveto


Perityt kentät eivät ole Odoo-kehityksen erikoisominaisuus. Ne ovat sisäänrakennettu osa järjestelmän arkkitehtuuria. Suhteet käyttäjien ja kumppaneiden, tuotemuunnelmien ja -mallien, myyntitilausten ja asiakastietojen välillä: kaikki nämä perustuvat kenttäperintään, jotta tiedot pysyvät johdonmukaisina ja vältetään päällekkäisyydet.


Ymmärtämällä, minkä perintötyypin tulisi käyttää, milloin käyttää liittyvää kenttää sen sijaan ja miten nämä mekanismit käyttäytyvät tietokannassa, teet itsestäsi merkittävästi tehokkaamman Odoo-muokkaajan. Kirjoitat siistimpää koodia, suunnittelet parempia tietomalleja ja käytät vähemmän aikaa odottamattomien kenttäkäyttäytymisten virheiden korjaamiseen.


Keskeinen oppiminen on yksinkertainen: Odoon ORM on suunniteltu niin, että kentät sijaitsevat yhdessä paikassa ja niitä käytetään monista. Tämä on periaate perityissä kentissä, ja se pitää Odoon tietomallin johdonmukaisena, vaikka se kasvaa kymmenien toisiinsa liittyvien moduulien myötä.

Tarvitsetko apua Odoo-toteutuksessasi?


Dasolossa autamme yrityksiä toteuttamaan, mukauttamaan ja optimoimaan Odoo:ta. Olitpa sitten rakentamassa mukautettua moduulia alusta alkaen, laajentamassa vakiomalleja uusilla kentillä tai yrittämässä ymmärtää, miksi tietomallisi käyttäytyy odottamattomilla tavoilla, tiimillämme on käytännön Odoo-kokemusta, joka auttaa sinua etenemään nopeammin ja välttämään kalliita virheitä.


Jos sinulla on kysymyksiä Odoo-tietomallisi, mukautettujen kenttästrategioidesi tai teknisen toteutuksesi suhteen, keskustelemme mielellämme tilanteestasi. Ota meihin yhteyttä ja etsitään oikea lähestymistapa projektiisi.

Peritytöt Odoossa: Kuinka ORM Jakaa Tietoa Mallien Kesken
Dasolo 6. maaliskuuta 2026
Jaa tämä kirjoitus
Kirjaudu sisään jättääksesi kommentin