Siirry sisältöön

Odoon Kontekstikentät: Käytännön Opas

Ymmärrä, miten konteksti muokkaa kenttäkäyttäytymistä, oletusarvoja ja tietueiden suodatusta Odoo ORM:ssä
6. maaliskuuta 2026 kirjoittanut
Odoon Kontekstikentät: Käytännön Opas
Dasolo
| Ei vielä kommentteja

Jos olet viettänyt aikaa työskennellen Odoo ORM:n kanssa tai mukauttamassa näkymiä, olet lähes varmasti nähnyt sanan konteksti nousevan esiin. Se esiintyy kenttämäärittelyissä, XML-näkymäattribuuteissa ja Odoon Python-koodissa. Kuitenkin monille kehittäjille ja konsultteille se on edelleen yksi niistä asioista, jotka vain toimivat, kunnes ne eivät toimi.


Kontekstikenttien ymmärtäminen Odoossa ei ole vain akateeminen harjoitus. Se vaikuttaa suoraan siihen, miten tietomallisi käyttäytyy, miten lomakkeet esitäyttävät arvoja, miten tietueita suodatetaan ja miten lasketut kentät päättävät, mitä palauttaa. Olitpa sitten tekemässä yksinkertaista odoo-mukautusta tai rakentamassa täyttä moduulia, kontekstin oikea saaminen säästää paljon virheenkorjausaikaa.


Tämä opas purkaa, mitä konteksti on, kuinka se virtaa Odoo-kehyksessä ja kuinka käyttää sitä luottavaisesti todellisissa projekteissa.

Mikä on konteksti Odoossa


Konteksti Odoossa on Python-sanakirja, joka kulkee jokaisen pyynnön, jokaisen metodikutsun ja jokaisen tietueoperaation mukana. Se ei ole kenttätyyppi perinteisessä mielessä. Et löydä fields.Context() Odoo ORM:stä. Sen sijaan konteksti on mekanismi, joka muuttaa kenttien käyttäytymistä.


Ajattele sitä näkymättömänä ohjeistona, joka kulkee datasi mukana. Nämä ohjeet kertovat Odoolle asioita, kuten: esitäytä tämä kenttä oletusarvolla, näytä myös arkistoidut tietueet, laske tämä kenttä eri kielellä tai sovella tätä aluetta, kun näytetään liittyvien tietueiden valitsinta.


Missä konteksti ilmenee

Kohtaat kontekstin kolmessa pääpaikassa Odoo-tietomallissa:

  • Pythonin kenttämäärittelyissä: context-parametri suhteellisilla kentillä, kuten Many2one, One2many ja Many2many.
  • XML-näkymäattribuuteissa: context-attribuutti <field>-tageissa lomake-, lista- ja kanban-näkymissä.
  • ORM-ympäristössä: Saatavilla self.env.context Python-koodissa ja muokattavissa self.with_context(key=value).

Kaikissa kolmessa tapauksessa konteksti tekee samaa perusasiaa: se kuljettaa ylimääräistä tietoa, joka muokkaa, miten kenttä tai tietue käyttäytyy ajonaikana.

Kuinka konteksti toimii Odoo-tietomallissa


Konteksti virtaa Odoo-pyyntösyklin läpi siitä hetkestä, kun käyttäjä avaa lomakkeen, siihen hetkeen, kun tietue tallennetaan. Tässä on, miten keskeiset mekanismit toimivat käytännössä.


Oletusarvot default_*:lla

Yksi yleisimmin käytetyistä kontekstimalleista on default_field_name. Kun siirrät avaimen, joka alkaa default_, Odoo käyttää sitä täyttämään kentän ennakkoon, kun uusi tietue luodaan.

Esimerkiksi, jos painike avaa uuden myyntitilauslomakkeen ja siirtää {"default_partner_id": 42} kontekstissa, asiakaskenttä on jo asetettu kumppanille, jonka ID on 42. Käyttäjä näkee ennakkoon täytetyn lomakkeen ilman lisä-Python-logiikkaa.


Tätä mallia käytetään laajalti Odoo-kehityksessä älykkäiden navigointivirtojen luomiseksi tietueiden välillä.


Konteksti-attribuutti suhteellisilla kentillä

Kun määrität Many2one-, One2many- tai Many2many-kentän Pythonissa, voit siirtää context-parametrin. Tämä konteksti sovelletaan aina, kun relaatio-kenttä lataa tai luo tietueita sen ponnahdus- tai alasvetovalikon kautta.


Käytännön esimerkki: Many2one, joka osoittaa res.partner:iin ja jossa on context={"default_is_company": True}, tarkoittaa, että jos käyttäjä luo uuden kumppanin suoraan tuosta kentästä, On yritys -valintaruutu on valmiiksi valittuna. Ohjaat käyttäjää kohti oikeita tietoja ilman, että pakotat sitä.


Konteksti XML-näkymissä

XML-näkymässä context-attribuutti kenttä-tunnisteessa toimii samalla tavalla, mutta se voi olla dynaaminen. Voit viitata muihin kenttäarvoihin Odoon arviointisyntaksin avulla:


Tämä mahdollistaa älykkäiden lomakkeiden rakentamisen, joissa yhden kentän konteksti riippuu toisen arvosta. Se on keskeinen tekniikka odoo-kustomoinnissa, joka luo älykkäitä relaatioita ilman ylimääräisen Python-koodin kirjoittamista.


Kontekstin lukeminen ja muokkaaminen Pythonissa

Minkä tahansa mallimenetelmän sisällä voit lukea nykyisen kontekstin käyttämällä self.env.context. Tämä antaa sinulle koko sanakirjan sellaisena kuin se oli, kun menetelmää kutsuttiin.


Jos haluat suorittaa koodia muokatussa kontekstissa, käytät self.with_context(key=value). Tämä palauttaa uuden tietuejoukon, joka sisältää päivitetyn kontekstin ilman, että alkuperäistä muutetaan. Se on siisti, ei-haitallinen malli, joka sopii hyvin Odoon funktionaaliseen ohjelmointityyliin.


Yleiset sisäänrakennetut kontekstin avaimet

Odoo itse käyttää useita varattuja kontekstin avaimia, jotka laukaisevat erityistä käyttäytymistä Odoo-kehyksessä:


  • lang: Muuttaa käännettyjen kenttäarvojen käytettävää kieltä.
  • active_test: Aseta False mukaan, jotta arkistoidut tietueet sisältyvät hakutuloksiin.
  • no_recompute: Estää tallennettujen lasketun kenttien uudelleenlaskennan.
  • mail_notrack: Poistaa keskustelun seurannan käytöstä kirjoitustoiminnossa.
  • allowed_company_ids: Hallitsee moniyrityksen tietueiden näkyvyyttä.
  • bin_size: Palauttaa tiedostokoot binäärisen sisällön sijaan binäärikentille.

Näiden sisäänrakennettujen avainten tunteminen on osa mitä tahansa vankkaa odoo-kehittäjän opasta, koska ne antavat sinulle mahdollisuuden hallita käyttäytymistä ilman mukautetun koodin kirjoittamista.

Liiketoimintakäyttötapaukset


Kontekstikentät eivät ole vain kehittäjien työkalu. Ne ratkaisevat todellisia työnkulkuongelmia eri liiketoiminta-alueilla. Tässä on viisi esimerkkiä yleisistä Odoo-toteutuksista.


1. CRM: Myyntitiimin esitäyttö uusille liideille

Myyntipäällikköllä on kanban-näkymä, joka on suodatettu hänen tiimilleen. Kun hän napsauttaa "Uusi", hän odottaa, että liidi määritetään automaattisesti hänen tiimilleen. Siirtämällä default_team_id toiminnon kontekstiin, tiimikenttä esitäytetään heti, kun lomake avautuu. Ei manuaalista valintaa, ei vääriä tiimimäärittelyjä.


2. Myynti: Hintaluettelon oletus asiakassegmentin mukaan

Kun myyjä luo tarjouksen tietystä asiakaskategoriasta, hintaluettelokenttä voidaan esiasettaa kontekstin avulla. Konteksti kuljettaa default_pricelist_id kategorian perusteella, ohjaten myyjää oikeaan hinnoitteluun rajoittamatta heidän valintojaan.


3. Varasto: Sijaintien suodattaminen siirtolomakkeissa

Varastotoiminnoissa siirtolomakkeen lähdesijaintikenttä voi käyttää kontekstia rajoittaakseen avattavan valikon vain tietyn varaston sijainteihin. Tämä tehdään siirtämällä domain kontekstin kautta Many2one-kenttään, pitäen käyttöliittymän siistinä ja vähentäen virheitä monivarastokokoonpanoissa.


4. Kirjanpito: Monikieliset Laskurivit

Kun luodaan laskuja kansainvälisille asiakkaille, lang-kontekstin avain pakottaa käännetyt kuvaukset näkymään asiakkaan kielellä. Ranskalaiselle asiakkaalle lähetetty lasku näyttää tuotenimet ja kuvaukset ranskaksi, vaikka sisäinen tietokanta tallentaa kaiken englanniksi.


5. Mukautetut Mallit: Arkistoitujen Tuotteiden Näyttäminen Erityisessä Näkymässä

Toimintatiimi tarvitsee tarkastella lopetettuja tuotteita aktiivisten rinnalla. Mukautettu luettelonäkymä välittää active_test: False toimintakontekstissaan. Ilman Python-koodin muuttamista kaikki tuotteet, mukaan lukien arkistoidut, näkyvät kyseisessä näkymässä, kun taas muu käyttöliittymä pysyy muuttumattomana.

Kontekstin luominen ja mukauttaminen kentillä


Odoossa on kaksi tapaa lisätä tai muokata kontekstia kentissä: käyttämällä Odoo Studioa ilman koodia tai kirjoittamalla Pythonia ja XML:ää täydellistä teknistä hallintaa varten. Tämä on keskeinen osa mitä tahansa odoo teknistä opasta kenttäkäyttäytymisestä.


Käyttäen Odoo Studioa

Odoo Studio mahdollistaa tiettyjen kenttäominaisuuksien muokkaamisen ilman koodin kirjoittamista. Suhteellisille kentille Studio tarjoaa konfigurointivaihtoehdon, jossa voit asettaa oletusarvoja, jotka sovelletaan, kun uusi tietue luodaan kyseisestä kentästä.


Tämä on hyödyllistä yksinkertaisissa tapauksissa: yrityksen, tiimin, kategorian tai vastuuhenkilön ennakko täyttämisessä. Rajoitus on, että Studion kontekstituki on tarkoituksella yksinkertaistettu. Dynaamisen kontekstin, joka viittaa muihin kenttäarvoihin, osalta sinun on käytettävä teknistä reittiä.


Kun käytät odoo studio kenttiä, pidä mielessä, että asettamasi konteksti tallennetaan suoraan näkymään. Jos myöhemmin luot teknisen mukautuksen samaan näkymään, sinun on otettava huomioon olemassa oleva Studio-määritelty konteksti konfliktien välttämiseksi.


Kontekstin Määrittäminen Kentissä Pythonissa

Mukautetussa moduulissa konteksti lisätään suoraan kenttämäärittelyyn. Many2one-kentälle context-parametri hyväksyy staattisen sanakirjan:


Tämä staattinen konteksti sovelletaan joka kerta, kun kenttä lataa tai luo siihen liittyviä tietueita. Se ei muutu muiden kenttäarvojen perusteella. Jos haluat kontekstin, joka reagoi nykyisen tietueen tilaan, siirrä logiikka näkymätasolle.


Määritellään konteksti XML-näkymissä

XML-näkymässä konteksti-attribuutti hyväksyy merkkijonon, jonka Odoo arvioi ajonaikaisesti. Voit viitata kenttäarvoihin, nykyiseen käyttäjä-ID:hen (uid), aktiivisen tietueen ID:hen (active_id) ja muihin muuttujiin:

Tämä tekee näkymätason kontekstista paljon joustavamman kuin kenttäkohtaisesta kontekstista. Se on standardimenettely Odoo-kehyksessä lomakkeiden rakentamisessa, joissa yhden kentän käyttäytyminen riippuu toisesta. Näin voit myös luoda kenttiä Odoo käyttäytymistä, joka tuntuu luonnolliselta ja intuitiiviselta loppukäyttäjille.


Kontekstin välittäminen ikkunatoimintojen kautta

Kontekstin voi myös asettaa ir.actions.act_window -tietueisiin. Näin valikot ja painikkeet välittävät kontekstin avautuviin näkymiin. Toiminnon context-kenttä sisältää sanakirjan, joka yhdistetään istunnon kontekstiin, kun näkymä ladataan.


Tämä on puhtain tapa käsitellä käyttötapauksia, kuten yllä olevaa CRM-myynti-tiimi esimerkkiä. Konteksti elää toiminnossa, ei kenttä määritelmässä, mikä tarkoittaa, että voit saada erilaisia oletusarvoja eri navigointikonteksteissa ilman, että sinun tarvitsee koskea mallikoodiin.

Parhaat käytännöt


Työskentely kontekstin kanssa Odoossa sujuu paljon paremmin, kun noudatat muutamaa johdonmukaista tapaa. Nämä pätevät riippumatta siitä, rakennatko moduulia vai teetkö nopeaa Odoo-mukautusta.


  • Käytä kontekstia ehdotuksiin, ei pakottamiseen. Kontekstiin perustuvat oletusarvot ohjaavat käyttäjiä estämättä heitä. Jos tarvitset tiukkaa rajoitusta, käytä sen sijaan domainia tai onchange-menetelmää.
  • Pane dynaaminen konteksti näkymiin, ei kenttä määritelmiin. Kenttäkohtainen konteksti on staattinen. Jos kontekstin on heijastettava nykyisen tietueen tilaa, XML-näkymä on oikea paikka sille.
  • Käytä with_context() sen sijaan, että muokkaat env.contextia suoraan. Odoon ympäristö on suunniteltu olemaan muuttumaton kutsun aikana. Luo aina uusi ympäristö with_context() -menetelmällä sen sijaan, että yrittäisit muuttaa olemassa olevaa.
  • Ole tarkoituksellinen siinä, mitä välität kontekstissa. Kontekstin avaimet kerääntyvät, kun ne kulkevat kutsupinossa. Tarpeettomien avainten välittäminen voi johtaa odottamattomaan käyttäytymiseen menetelmissä, jotka tarkistavat näitä avaimia.
  • Käytä kontekstia lippujen välittämiseen ehdollista logiikkaa varten. Yleinen malli on välittää boolean-lippu, kuten from_wizard: True kontekstissa, ja tarkistaa se sitten laskentamenetelmässä tai onchange-menetelmässä eri käyttäytymisen soveltamiseksi. Tämä välttää mallikenttien saastuttamista työnkulun tilalla.
  • Dokumentoi mukautetut kontekstin avaimet moduulissasi. Kontekstin avaimet ovat näkymättömiä, ellei tiedä etsiä niitä. Lisää kommentti tai dokumentaatiosarja, joka selittää kaikki mukautetut kontekstin avaimet, joita moduulisi lukee tai asettaa. Tämä kannattaa, kun sinä tai kollegasi palaatte koodin pariin myöhemmin.

Yleiset sudenkuopat


Kontekstiin liittyvien virheiden diagnosoiminen voi olla hankalaa, koska konteksti on näkymätön käyttöliittymässä. Nämä ovat virheitä, jotka esiintyvät useimmiten oikeissa projekteissa.


Oletusarvojen käsittely pakollisina arvoina

Kontekstin kautta asetettu oletusarvo tulee voimaan vain, kun tietue luodaan lomakkeen kautta. Jos luot tietueita ohjelmallisesti ORM:n kautta ilman, että siirrät asiaankuuluvan kontekstin, oletusarvoa ei sovelleta. Kehittäjät odottavat joskus, että kontekstin oletusarvot käyttäytyvät kuten Python-tason default-parametrit kentissä. Ne eivät toimi niin. Siirrä aina konteksti eksplisiittisesti, kun luot tietueita koodissa, jos nämä oletusarvot ovat tärkeitä.


Kontekstisanakirjan suora muokkaaminen

Kontekstisanakirja on jaettu koko kutsupinossa. Jos muokkaat self.env.context suoraan, voit vaikuttaa odottamattomalla tavalla muuhun koodiin, joka toimii samassa transaktiossa. Oikea malli on aina self.with_context(new_key=value), joka luo uuden ympäristön kopion kontekstista plus muutoksesi.


Liian suuren kontekstin siirtäminen

Jokainen avain, jonka lisäät kontekstiin, kulkee koko kutsuketjun läpi. Jotkut Odoo-menetelmät tarkistavat tietyt kontekstin avaimet ja muuttavat käyttäytymistään sen mukaan. Odottamattomien avainten siirtäminen voi vahingossa laukaista näitä haaroja. Pidä konteksti kevyenä ja spesifisenä sen mukaan, mitä välitön operaatio tarvitsee.


Aktivoinnin unohtaminen arkistoitujen tietueiden hakemisessa

Oletusarvoisesti Odoon search() ja search_read() -menetelmät suodattavat arkistoidut tietueet (missä active = False). Jos koodisi tarvitsee työskennellä arkistoitujen tietueiden kanssa, sinun on eksplisiittisesti siirrettävä active_test: False kontekstissa. Tämä unohtaminen on erittäin yleinen virhe varaston ja tuotehallinnan mukautuksissa.


Kontekstikonfliktit Studion ja mukautetun koodin välillä

Jos Odoo Studio on asettanut kontekstin kentälle näkymässä, ja lisäät myöhemmin teknisen näkymälaajennuksen, joka kohdistuu samaan kenttään, molemmat kontekstit voivat olla ristiriidassa tai toinen voi ohittaa toisen XML-yhdistämisjärjestyksestä riippuen. Tarkista aina olemassa oleva konteksti kentällä ennen kuin lisäät oman kontekstisi näkymäperinnön kautta. Tämä on erityisen yleinen ongelma, kun yhdistetään odoo studio kenttiä moduulipohjaisten mukautusten kanssa.

Yhteenveto


Konteksti on yksi niistä mekanismeista Odoossa, joka hiljaisesti tekee paljon työtä. Kun ymmärrät, miten se virtaa kenttämääritysten, näkymäattribuuttien ja ORM-ympäristön läpi, saat paljon tarkemman tason hallintaa siitä, miten tietomallisi käyttäytyy.


Keskeiset opit ovat yksinkertaisia. Käytä default_* avaimia ohjataksesi käyttäjiä oikean datan suuntaan ilman pakottamista. Aseta dynaaminen konteksti näkymiin sen sijaan, että määrittäisit sen kenttämäärityksissä. Käytä aina with_context() -metodia sen sijaan, että muokkaisit kontekstia paikan päällä. Ja pidä konteksti kevyenä, jotta se ei häiritse järjestelmän muita osia odottamattomasti.

Olitpa sitten läpi käymässä odoo kenttäopasta, rakentamassa mukautettua moduulia tai vianetsimässä kenttää, joka käyttäytyy oudosti, kontekstin ymmärtäminen on aina osa ratkaisua.


Meillä Dasolossa autamme yrityksiä toteuttamaan, mukauttamaan ja optimoimaan Odoota vastaamaan heidän todellisia liiketoimintaprosessejaan. Jos työskentelet mukautuksen parissa, jossa konteksti on mukana etkä ole varma, että olet oikealla tiellä, tai jos haluat vain keskustella Odoo-toteutuksestasi, autamme mielellämme.

Ota yhteyttä tiimiimme yhteydenottosivun kautta ja kerro meille, mitä olet rakentamassa. Teemme yhteistyötä kaiken kokoisten yritysten kanssa saadaksemme Odoon toimimaan niin kuin sen pitäisi.

Odoon Kontekstikentät: Käytännön Opas
Dasolo 6. maaliskuuta 2026
Jaa tämä kirjoitus
Kirjaudu sisään jättääksesi kommentin