Johdanto
Odoossa kaikki liiketoimintatiedot — laskut, myyntitilaukset, yhteystiedot ja niin edelleen — tallennetaan rakenteina, joita kutsutaan malleiksi. Nämä mallit määrittelevät, miten tiedot jäsennellään ja säilytetään tietokannassa.
Mallien ymmärtäminen on välttämätöntä sekä kehittäjille että toiminnallisille asiantuntijoille. Mallit muodostavat Odoon tietomallin ytimen: niiden kautta määritellään kentät, liittymät ja sovelluslogiikka.
Mutta mistä Odoo pitää kirjaa kaikista järjestelmässä olevista malleista? Sitä varten on ir.model. Se on metatietorekisteri, joka sisältää tiedot kaikista muista malleista — olitpa rakentamassa moduuleja, tutustumassa API:in tai korjaamassa ongelmia, ir.model tulee vastaan.
Mikä on ir.model-malli
ir.model on siis Odoon malli‑rekisteri, jossa on yksi tietue per järjestelmän malli. Kun määrittelet uuden mallin Pythonissa tai luot sen Studio‑työkalulla, Odoo luo tai päivittää vastaavan ir.model‑tietueen.
Tämä rekisteri kuuluu Odoon perusmoduuliin ja on osa ydinkehystä. Kaikilla malleilla — tavallisilla, abstrakteilla tai väliaikaisilla (transient) — on oma merkintänsä ir.modelissa.
ir.model on tiiviissä yhteydessä ir.model.fields‑tauluun, joka kuvaa mallin kenttiä. Yhdessä nämä kaksi muodostavat Odoon kyvyn tarkastella ja käsitellä mallien rakennetta dynaamisesti.
Kehittäjät hyödyntävät ir.modelia esimerkiksi listatessaan käytettävissä olevia malleja, selvittäessään perintäsuhteita tai rakentaessaan työkaluja, jotka toimivat minkä tahansa mallin kanssa. ir.model on myös luettavissa Odoon XML‑RPC‑ ja JSON‑RPC‑rajapinnoista.
Mallin keskeiset kentät
Seuraavaksi käydään läpi tärkeimmät kentät ir.model‑tietueissa — niiden tuntemus helpottaa rekisterin kanssa työskentelyä ja integraatioiden rakentamista.
1. name
Tyyppi: Char. Ihmislukuinen otsikko mallille. Tämä nimi näkyy Teknisen asetuksenäkymissä ja kehittäjätyökaluissa, ja se voi olla käännettävä. Se toimii mallia kuvaavana tunnisteena käyttöliittymässä.
2. model
Tyyppi: Char. Mallin tekninen nimi, jota käytät Python‑koodissa, esimerkiksi res.partner tai sale.order. Kenttä on pakollinen ja indeksoitu nopeaa hakua varten.
3. info
Tyyppi: Text. Lisätietoja tai kommentteja mallista—vapaamuotoinen dokumentaatio. Usein tyhjä, mutta hyödyllinen sisäiseen dokumentointiin.
4. state
Tyyppi: Selection. Kertoo, onko malli osa perustarjontaa (base) vai luotu manuaalisesti (manual) esimerkiksi Studio‑työkalulla. Base‑malleja suojellaan tiukemmin kuin manuaalisia.
5. transient
Tyyppi: Boolean. Merkitsee, onko kyseessä väliaikainen malli. Transient‑mallien tietueet siivotaan automaattisesti — niitä käytetään mm. ohjauselementeissä ja väliaikaisissa lomakkeissa.
6. field_id
Tyyppi: One2many (ir.model.fields). Lista mallille määritellyistä kentistä. Jokainen ir.model.fields‑tietue kuvaa yhden kentän nimeä, tyyppiä ja asetuksia.
7. access_ids
Tyyppi: One2many (ir.model.access). Mallin käyttöoikeudet. Kukin tietue kertoo, mitkä ryhmät voivat luoda, lukea, muokata tai poistaa tietueita — tärkeä osa turvallisuuskonfiguraatiota.
8. rule_ids
Tyyppi: One2many (ir.rule). Malliin liittyvät tietuerajat (record rules). Näillä säännellään, mitä tietueita kukin käyttäjäryhmä näkee — rivitason turvallisuus.
9. inherited_model_ids
Tyyppi: Many2many (ir.model). Ne vanhemmat mallit, joilta nykyinen malli perii ominaisuuksia. Kun malli perii toisen, sen yhteydet näkyvät tässä kentässä.
10. modules
Tyyppi: Char. Laskennallinen kenttä, joka näyttää moduulit, joissa malli määritellään tai laajennetaan. Hyödyllinen riippuvuuksien ymmärtämiseen.
11. sort
Tyyppi: Integer. Näyttöjärjestys Teknisten asetusten listassa — pienemmät arvot nousevat ensin. Auttaa järjestämään malleja hallintanäkymissä.
12. constrains
Tyyppi: Text. Python‑tason rajoitteiden määrittelyt (@api.constrains). Tallentaa mallikohtaisia validointisääntöjä.
13. post_constrains
Tyyppi: Text. Jälkivahvistuksiin liittyvä Python‑koodi. Käytetään tarkempaan tai vaiheistettuun validointiin.
14. sql_constraints
Tyyppi: Text. Tietokantatason rajoitteet, kuten uniikit indeksit. Varmistaa datan eheyden tietokantatasolla.
15. view_ids
Tyyppi: One2many (ir.ui.view). Laskennallinen lista malliin liittyvistä näkymistä. Hyödyllinen, kun haluat selvittää, missä näkymissä malli esiintyy.
16. record_count
Tyyppi: Integer. Laskennallinen kenttä, joka kertoo, kuinka monta tietuetta mallissa on — kätevä yleiskatsaus datan määrään.
17. display_name
Tyyppi: Char. Laskennallinen esitysnimi, joka näytetään listoissa ja relaatiokentissä. Usein yhdistää name‑ ja model‑tiedot selkeäksi tunnisteeksi.
18. create_date
Tyyppi: Datetime. Tietueen luontiaika, jota Odoo ylläpitää automaattisesti.
19. create_uid
Tyyppi: Many2one (res.users). Käyttäjä, joka loi tietueen — hyödyllinen auditointia varten.
20. write_date
Tyyppi: Datetime. Viimeisin muokkausaika, myös automaattisesti ylläpidetty.
21. write_uid
Tyyppi: Many2one (res.users). Viimeksi muokannut käyttäjä — myös auditointiin liittyvä tieto.
22. active
Tyyppi: Boolean. Pehmeän poistamisen eli arkistoinnin merkki. Kun arvo on False, malli on käytännössä deprekoitu mutta säilyy historiassa.
23. id
Tyyppi: Integer. Tietokannan uniikki tunniste jokaiselle ir.model‑tietueelle — käytetään myös API‑viittauksissa.
24. restrict_functionality
Tyyppi: Boolean. Merkitsee, että mallin toiminnallisuutta voi olla rajoitettu eri Odoo‑versioissa (esim. Enterprise vs Community).
25. is_mail_thread
Tyyppi: Boolean. Ilmoittaa, onko malli viestiketjuominaisuutta (chatter) tukeva. Jos kyllä, mallilla voi olla viestejä ja seuraajia.
26. is_mail_activity
Tyyppi: Boolean. Kertoo, tukeeko malli aktiviteetteja ja tehtäväsuunnittelua — käytetään seuraavien toimenpiteiden hallintaan.
Miten tätä mallia käytetään liiketoimintaprosesseissa
1. Tekninen asetukset ja konfigurointi
Järjestelmän ylläpitäjät selaavat malleja Teknisen asetuksen kautta. ir.model‑tietueet määrittelevät, mitä listauksessa näkyy: nimi, kuvaus ja kenttien määrä antavat nopeasti käsityksen mallin sisällöstä.
2. Käyttöoikeuksien hallinta
Turvallisuusasetuksia tehdessäsi määrität ryhmien oikeudet. ir.modelin access_ids kertoo, kuka saa luoda, lukea, muokata tai poistaa tietueita kullakin mallilla.
3. Odoo Studio -räätälöinnit
Kun käyttäjä luo oman mallin Studio‑työkalulla, Odoo lisää uuden ir.model‑tietueen tilaksi manual ja täyttää field_id‑suhteen uusilla kentillä.
4. API‑integraatioiden löydettävyys
Ulkoiset järjestelmät voivat tutkia käytettävissä olevia malleja XML‑RPC‑ tai JSON‑RPC‑rajapintojen kautta. ir.model tarjoaa tarvittavan metadatan integraatioiden rakentamiseen ja automaattiseen yhteentoimivuuteen.
5. Moduulikehitys ja virheenkorjaus
Kehittäjät käyttävät ir.modelia moduuleja rakentaessaan: he tarkastavat perintäsuhteet inherited_model_ids‑kentästä ja tutkivat mallin kenttiä field_id:stä ymmärtääkseen, mitä muutokset vaikuttavat.
Miten kehittäjät laajentavat tätä mallia
Kehittäjät eivät yleensä yliajaa ir.modelin omia metodeja. Rekisteri päivittyy automaattisesti moduuleja ladattaessa, ja sen sijaan muokataan kuvattuja malleja tarvittaessa.
Mallien perintä
Kun käytät Pythonissa _inherit = 'res.partner', Odoo päivittää res.partnerin ir.model‑merkintää ja uusi lapsimalli linkittää itsensä inherited_model_ids‑kenttään. Näin rekisteri pysyy synkronissa perintärakenteiden kanssa.
Kenttien lisääminen
Kun lisäät uusia kenttiä malliin, Odoo luo ir.model.fields‑tietueet, jotka viittaavat malliin model_id‑kentän kautta. Varsinainen ir.model‑tietue ei yleensä muutu kenttien lisäämisen myötä.
Python‑laajennukset
Sen sijaan, että muokkaisit ir.modelia suoraan, laajennat niitä malleja, joita ir.model kuvaa. ir.model on osa ydintä eikä ole tarkoitettu suoraan korvattavaksi.
Odoo Studio
Studio luo tarvittavat ir.model ja ir.model.fields‑tietueet ilman koodia. Transient‑lipuke erottaa väliaikaiset mallit pysyvistä. Abstraktit mallit eivät yleensä synnytä ir.model‑tietuetta, koska niillä ei ole omaa tietokantataulua.
Hyvät käytännöt
- Käytä ir.modelia mallien tutkintaan ja integraatioiden dynaamiseen rakentamiseen sen sijaan, että kovakoodaisit mallinimet sovellukseen.
- Hyödynnä model‑kenttää hakuihin — se on indeksoitu ja nopea tapa löytää tietyn mallin metatiedot.
- Tarkista inherited_model_ids ennen laajennuksia. Ymmärrä perintäketju, jotta muutokset eivät riko olemassaolevaa logiikkaa.
- Käytä Odoon APIa (XML‑RPC/JSON‑RPC) lukeaksesi ir.model‑tietoja; vältä suoria muutoksia ellei tavoitteena ole rakentaa Studio‑tyyppistä työkalua.
- Tutki kenttäkohtaisia tietoja ir.model.fields‑taulusta: field_id‑suhde paljastaa kaikki mallin kentät ja niiden asetukset.
Yleisiä virheitä
- Älä muokkaa ir.model‑tietueita suoraan tuotantotietokannassa ilman hyvää syytä. Rekisteriä hallinnoi Odoo ja manuaaliset muutokset voivat rikkoutua päivityksissä tai rikkoa järjestelmän.
- Älä sekoita ir.model‑tietuetta Python‑luokan kanssa. ir.model on tietokantatason metadata; varsinainen liiketoimintamalli on Python‑luokka, joka toteuttaa käyttäytymisen.
- Muista, että kaikki luokat eivät synny ir.model‑tietueina. Abstraktit mallit eivät luo omaa tietokantataulua eivätkä välttämättä ilmesty rekisteriin.
- Älä käytä transient‑malleja pysyvän datan säilytykseen. Ne on tarkoitettu väliaikaisiin käyttötapauksiin, ja niiden tietueet poistetaan siivousprosessissa.
- Rajoita ir.model‑kyselyjä: Odoo‑instanssissa voi olla satoja malleja, joten suodata aina model‑nimellä tai käytä hakudomaineja.
Yhteenveto
ir.model on Odoon mallirekisteri, joka tallentaa metatietoa jokaisesta järjestelmän mallista. Kun ymmärrät sen kentät ja yhteyden ir.model.fieldsiin, liiketoimintalogiikan ja integraatioiden hallinta helpottuu.
Olitpa tekninen konsultti selaamassa Teknisiä asetuksia tai kehittäjä rakentamassa integraatioita, hyvä ymmärrys ir.modelista säästää aikaa ja ehkäisee virheitä.
Tarvitsetko apua Odoo‑käyttöönotossasi?
Dasolo auttaa yrityksiä ottamaan käyttöön, räätälöimään ja optimoimaan Odoota. Erikoisosaamistamme ovat API‑integraatiot ja Odoo‑kehitys — tiimillämme on vahva kokemus Odoon tietomallista ja malleista kuten ir.model.
Tarvitsetko apua Odoo‑käyttöönotossa, räätälöidyissä moduuleissa tai integraatioissa? Autamme mielellämme. Varaa demo keskustellaksesi projektistasi.