Introduksjon
I Odoo definerer modeller hvordan data er strukturert og lagret i databasen. Hver bit av forretningsdata du jobber med, fra salgsordrer til fakturaer til kontakter, lever i en modell.
Å forstå Odoo-modeller er essensielt for både utviklere og funksjonelle konsulenter. Modeller er grunnlaget for Odoo-databasearkitekturen. De definerer Odoo-felt, relasjoner og forretningslogikk.
Men hvor lagrer Odoo informasjon om hver modell i systemet? Svaret er ir.model. Denne modellen i Odoo er registeret som holder metadata om alle andre modeller. Enten du bygger tilpassede moduler, utforsker API-en eller feilsøker Odoo, vil du støte på ir.model.
Hva er ir.model-modellen
ir.model-modellen er metadata-registeret for alle Odoo-modeller. Den lagrer én post per modell i systemet. Når du definerer en ny modell i Python eller oppretter en via Odoo Studio, oppretter eller oppdaterer Odoo en ir.model-post.
Denne modellen i Odoo brukes av basismodulen. Den er en del av kjernestrukturen. Hver Odoo-modell, enten det er en vanlig modell, en Odoo-abstrakt modell, eller en Odoo-transient modell, har en tilsvarende ir.model-post.
Modellen er definert i basismodulen. Den er nært knyttet til ir.model.fields, som lagrer metadata om hvert Odoo-felt på hver modell. Sammen danner ir.model og ir.model.fields ryggraden i Odoos introspeksjons- og refleksjonskapasiteter.
Utviklere bruker ir.model når de trenger å liste tilgjengelige modeller, sjekke modellarv eller bygge dynamiske verktøy som fungerer med hvilken som helst modell. API-modellen i Odoo eksponerer ir.model gjennom XML-RPC og JSON-RPC.
Nøkkelfelt i modellen
Her er de viktigste Odoo-feltene i ir.model-modellen. Å forstå disse vil hjelpe deg å jobbe effektivt med modellregisteret.
1. navn
Type: Char. Dette feltet lagrer den menneskelig lesbare beskrivelsen av modellen. Det er oversettbart og vises i tekniske innstillinger og i utviklerverktøy. Det er etiketten du ser når du blar gjennom modeller.
2. modell
Type: Char. Det tekniske navnet på modellen. Dette er strengen du bruker i Python-kode, som res.partner eller sale.order. Det er påkrevd og indeksert for raske oppslag.
3. info
Type: Text. Tilleggsinformasjon eller notater om modellen. Brukes til dokumentasjon og intern bruk. Kan være tomt for de fleste modeller.
4. tilstand
Type: Utvalg. Indikerer om modellen er base (fra Odoo-moduler) eller manuell (opprettet via Odoo Studio eller tilpasset kode). Base-modeller er beskyttet. Manuelle modeller kan endres mer fritt.
5. transient
Type: Boolean. Når True, er denne modellen en Odoo transient modell. Transiente modeller er midlertidige. Deres poster blir automatisk ryddet opp. Brukes for veivisere og midlertidige data.
6. field_id
Type: One2many (ir.model.fields). Listen over Odoo-felt definert på denne modellen. Hver ir.model.fields-post beskriver ett felt: dets navn, type og andre attributter.
7. access_ids
Type: One2many (ir.model.access). Tilgangsrettigheter for denne modellen. Hver post definerer hvilke grupper som kan opprette, lese, oppdatere eller slette poster. Brukes for sikkerhet.
8. rule_ids
Type: One2many (ir.rule). Registreringsregler for denne modellen. Registreringsregler begrenser hvilke poster brukere kan se. Brukes for radnivå sikkerhet.
9. inherited_model_ids
Type: Many2many (ir.model). Foreldremodellene når du bruker Odoo-modellarv. Når du arver en modell i Odoo, kobles barnemodellen til sin forelder her. Dette er Odoo arve-modell i aksjon.
10. moduler
Type: Char. Et beregnet felt som viser modulene der denne modellen er definert. For modeller utvidet av flere moduler, viser dette alle. Nyttig for å forstå avhengigheter.
11. sort
Type: Integer. Visningsrekkefølge for modellen i menyen for tekniske innstillinger. Lavere verdier vises først. Brukes for å organisere modelllisten.
12. constrains
Type: Text. Python begrensningsdefinisjoner. Lagrer koden for @api.constrains-dekoratører. Brukes når modellen har tilpasset valideringslogikk.
13. post_constrains
Type: Text. Python post-begrensningsdefinisjoner. Ligner på constrains, men for post-validering. Brukes for avanserte valideringsscenarier.
14. sql_constraints
Type: Text. SQL begrensningsdefinisjoner. Databasenivå begrensninger som unike indekser. Sikrer dataintegritet på databasenivå.
15. view_ids
Type: One2many (ir.ui.view). Beregnet felt som viser visninger knyttet til denne modellen. Brukes for introspeksjon og visningsadministrasjon.
16. record_count
Type: Integer. Beregnet felt som viser antall poster i denne modellen. Nyttig for rapportering og forståelse av hvor mye data en modell inneholder.
17. display_name
Type: Char. Beregnet felt for visningsrepresentasjon. Brukes når posten vises i lister og relasjoner. Kombinerer typisk navn og modell.
18. create_date
Type: Datetime. Lagrer dato og tid når posten ble opprettet. Administreres automatisk av Odoo.
19. create_uid
Type: Many2one (res.users). Brukeren som opprettet posten. Brukes for revisjon og sporing.
20. write_date
Type: Datetime. Lagrer dato og tid for den siste modifikasjonen. Også administrert automatisk.
21. write_uid
Type: Many2one (res.users). Brukeren som sist modifiserte posten. Brukes for revisjon.
22. aktiv
Type: Boolean. Soft delete flag. When False, the record is archived. Used for deprecated models.
23. id
Type: Integer. Database-ID. Unik identifikator for hver ir.model-post. Brukes når man refererer til modellen i API-anrop.
24. restrict_functionality
Type: Boolean. Når True, har denne modellen begrenset funksjonalitet i visse Odoo-utgaver. Brukes for differensiering mellom enterprise og community.
25. is_mail_thread
Type: Boolean. Indikerer om modellen er en e-posttråd. E-posttrådmodeller har chatter, meldinger og følgere. Brukes for modeller som støtter diskusjoner.
26. is_mail_activity
Type: Boolean. Indikerer om modellen støtter aktiviteter. Aktivitetsmodeller har aktivitetsplanlegger og sporing av neste handling.
Hvordan denne modellen brukes i forretningsarbeidsflyter
1. Teknisk innstillinger og konfigurasjon
Administratorer bruker menyen for tekniske innstillinger for å bla gjennom modeller. ir.model-postene definerer hva som vises i den listen. Hver modell viser sitt navn, beskrivelse og antall felt.
2. Tilgangsrettighetsadministrasjon
Når du konfigurerer sikkerhet, tildeler administratorer tilgangsrettigheter til grupper. access_ids på ir.model definerer hvilke grupper som kan opprette, lese, oppdatere eller slette poster for hver modell.
3. Odoo Studio Tilpasning
Når brukere oppretter tilpassede modeller i Odoo Studio, oppretter Odoo nye ir.model-poster med tilstanden manual. felt_id-relasjonen fylles med de tilpassede Odoo-feltene.
4. API og Integrasjonsoppdagelse
Eksterne systemer integreres med Odoo via XML-RPC eller JSON-RPC API. De kan spørre ir.model for å oppdage tilgjengelige modeller og deres struktur. API-modellen i Odoo eksponerer dette for introspeksjon.
5. Modulutvikling og Feilsøking
Utviklere bruker ir.model når de bygger moduler. De sjekker inherited_model_ids for å forstå Odoo-modellarv. De inspiserer field_id for å se alle Odoo-feltene på en modell.
Hvordan utviklere utvider denne modellen
Utviklere utvider sjelden ir.model direkte. I stedet jobber de med det når de definerer nye modeller. Modellregisteret oppdateres automatisk når du laster en modul.
Modellarv
Når du bruker _inherit = 'res.partner' i Python-koden din, oppdaterer Odoo ir.model-posten for res.partner. inherited_model_ids på din nye modells ir.model-post vil lenke til forelderen. Dette er Odoo-modellarv i aksjon. Den arvede modellen i Odoo holder registeret synkronisert.
Legge til Felter
Når du legger til nye Odoo-felter til en modell, oppretter Odoo ir.model.fields-poster. Disse lenker til ir.model via model_id-feltet. ir.model-posten selv blir ikke modifisert.
Python-utvidelser
Du overstyrer vanligvis ikke ir.model-metoder. Modellen er en del av kjerne-rammeverket. Hvis du trenger å tilpasse atferd, utvider du modellene som ir.model beskriver, ikke ir.model selv.
Odoo Studio
Odoo Studio oppretter ir.model og ir.model.fields poster når du bygger tilpassede modeller. Ingen kode nødvendig. Den midlertidige flagget skiller Odoo midlertidige modeller fra vanlige modeller. Abstrakte modeller (Odoo abstrakt modell) oppretter ikke ir.model-poster fordi de ikke har noen databasetabell.
Beste praksis
- Bruk ir.model for introspeksjon og oppdagelse. Når du bygger integrasjoner, spør ir.model for å liste tilgjengelige modeller i stedet for å hardkode.
- Bruk model-feltet for oppslag. Det er indeksert. Søk etter modellenavn når du trenger metadata for en spesifikk modell.
- Sjekk inherited_model_ids når du bygger tilpassede moduler. Forstå arvkjeden før du utvider.
- Bruk API-modellen i Odoo (XML-RPC eller JSON-RPC) for å lese ir.model. Unngå å endre den med mindre du bygger et Studio-lignende verktøy.
- Bruk ir.model.fields for felt-nivå introspeksjon. field_id-relasjonen gir deg alle Odoo-feltene på en modell.
Vanlige feil
- Endre ir.model-poster direkte. Registeret administreres av Odoo. Endringer kan bryte systemet eller bli overskrevet ved oppgradering.
- Forveksle ir.model med Python-modellklassen. ir.model er databaseposten. Python-klassen er den faktiske modellen. De er relaterte, men forskjellige.
- Anta at alle modeller har ir.model-poster. Odoo abstrakte modellklasser oppretter ikke databasetabeller eller ir.model-poster.
- Glemmer at midlertidige modeller er midlertidige. Den midlertidige flagget betyr at Odoo midlertidige modelldata blir ryddet opp. Ikke bruk det for permanent data.
- Spør om ir.model uten filtrering. En typisk Odoo-instans har hundrevis av modeller. Filtrer alltid etter modellenavn eller bruk søkedomener.
Konklusjon
ir.model-modellen er registeret over alle Odoo-modeller. Den lagrer metadata om hver modell i systemet. Å forstå feltene dens og hvordan den relaterer seg til ir.model.fields vil hjelpe deg med å navigere i Odoo-datastrukturen.
Enten du er en funksjonell konsulent som utforsker tekniske innstillinger eller en utvikler som bygger API-integrasjoner, vil en solid forståelse av ir.model spare tid og forhindre feil.
Trenger du hjelp med din Odoo-implementering?
Dasolo hjelper selskaper med å implementere, tilpasse og optimalisere Odoo. Vi spesialiserer oss på API-integrasjoner og Odoo-utvikling. Teamet vårt har dyp erfaring med Odoo-datastrukturen og modeller som ir.model.
Hvis du trenger hjelp med din Odoo-implementering, tilpassede moduler eller integrasjoner, er vi her for å hjelpe. Bestill en demo for å diskutere prosjektet ditt.