Introduktion
I Odoo definierar modeller hur data struktureras och lagras i databasen. Varje del av affärsdata du arbetar med, från försäljningsorder till fakturor till kontakter, finns i en modell.
Att förstå Odoo-modeller är avgörande för både utvecklare och funktionella konsulter. Modeller är grunden för Odoos dataarkitektur. De definierar Odoo-fält, relationer och affärslogik.
Men var lagrar Odoo information om varje modell i systemet? Svaret är ir.model. Denna modell i Odoo är registret som håller metadata om alla andra modeller. Oavsett om du bygger anpassade moduler, utforskar API:et eller felsöker Odoo, kommer du att stöta på ir.model.
Vad är ir.model-modellen
ir.model-modellen är metadata-registret för alla Odoo-modeller. Den lagrar en post per modell i systemet. När du definierar en ny modell i Python eller skapar en via Odoo Studio, skapar eller uppdaterar Odoo en ir.model-post.
Denna modell i Odoo används av basmodulen. Den är en del av kärnramverket. Varje Odoo-modell, oavsett om det är en vanlig modell, en Odoo-abstrakt modell eller en Odoo-övergående modell, har en motsvarande ir.model-post.
Modellen definieras i basmodulen. Den är nära relaterad till ir.model.fields, som lagrar metadata om varje Odoo-fält på varje modell. Tillsammans bildar ir.model och ir.model.fields ryggraden i Odoos introspektions- och reflektionsmöjligheter.
Utvecklare använder ir.model när de behöver lista tillgängliga modeller, kontrollera modellärv eller bygga dynamiska verktyg som fungerar med vilken modell som helst. API-modellen i Odoo exponerar ir.model genom XML-RPC och JSON-RPC.
Nyckelfält i modellen
Här är de viktigaste Odoo-fälten i ir.model-modellen. Att förstå dessa kommer att hjälpa dig att arbeta effektivt med modellregistret.
1. namn
Typ: Char. Detta fält lagrar den människoläsbara beskrivningen av modellen. Det är översättningsbart och visas i tekniska inställningar och i utvecklarverktyg. Det är etiketten du ser när du bläddrar bland modeller.
2. modell
Typ: Char. Den tekniska namnet på modellen. Detta är strängen du använder i Python-kod, som res.partner eller sale.order. Det är obligatoriskt och indexerat för snabba uppslag.
3. info
Typ: Text. Ytterligare information eller anteckningar om modellen. Används för dokumentation och internt bruk. Kan vara tomt för de flesta modeller.
4. tillstånd
Typ: Val. Indikerar om modellen är bas (från Odoo-moduler) eller manuell (skapad via Odoo Studio eller anpassad kod). Basmodeller är skyddade. Manuella modeller kan modifieras mer fritt.
5. transient
Typ: Boolean. När True är denna modell en Odoo transientmodell. Transientmodeller är temporära. Deras poster rensas automatiskt. Används för guider och temporära data.
6. field_id
Typ: One2many (ir.model.fields). Listan över Odoo-fält som definieras på denna modell. Varje ir.model.fields-post beskriver ett fält: dess namn, typ och andra attribut.
7. access_ids
Typ: One2many (ir.model.access). Åtkomsträttigheter för denna modell. Varje post definierar vilka grupper som kan skapa, läsa, uppdatera eller ta bort poster. Används för säkerhet.
8. rule_ids
Typ: One2many (ir.rule). Postregler för denna modell. Postregler begränsar vilka poster användare kan se. Används för radnivåsäkerhet.
9. inherited_model_ids
Typ: Many2many (ir.model). Föräldramodeller vid användning av Odoo-modelarv. När du ärver en modell i Odoo länkar barnmodellen till sin förälder här. Detta är Odoo:s arvmodell i arbete.
10. moduler
Typ: Char. Ett beräknat fält som listar de moduler där denna modell är definierad. För modeller som utökas av flera moduler visas alla av dem. Användbart för att förstå beroenden.
11. sort
Typ: Heltal. Visningsordning för modellen i menyn Tekniska Inställningar. Lägsta värden visas först. Används för att organisera modellens lista.
12. constrains
Typ: Text. Python begränsningsdefinitioner. Lagrar koden för @api.constrains-dekoratorer. Används när modellen har anpassad valideringslogik.
13. post_constrains
Typ: Text. Python post-begränsningsdefinitioner. Liknande som constrains men för post-validering. Används för avancerade valideringsscenarier.
14. sql_constraints
Typ: Text. SQL begränsningsdefinitioner. Databasnivåbegränsningar som unika index. Säkerställer dataintegritet på databasnivå.
15. view_ids
Typ: One2many (ir.ui.view). Beräknat fält som listar vyer kopplade till denna modell. Används för introspektion och vyhantering.
16. record_count
Typ: Heltal. Beräknat fält som visar antalet poster i denna modell. Användbart för rapportering och för att förstå hur mycket data en modell innehåller.
17. display_name
Typ: Char. Beräknat fält för visningsrepresentation. Används när posten visas i listor och relationer. Kombinerar vanligtvis namn och modell.
18. create_date
Typ: Datetime. Lagrar datum och tid när posten skapades. Hanteras automatiskt av Odoo.
19. create_uid
Typ: Many2one (res.users). Användaren som skapade posten. Används för granskning och spårning.
20. write_date
Typ: Datetime. Lagrar datum och tid för den senaste ändringen. Hanteras också automatiskt.
21. write_uid
Typ: Many2one (res.users). Användaren som senast ändrade posten. Används för granskning.
22. aktiv
Typ: Boolean. Flag för mjuk radering. När False arkiveras posten. Används för avvecklade modeller.
23. id
Typ: Heltal. Databas-ID. Unik identifierare för varje ir.model-post. Används när modellen refereras i API-anrop.
24. restrict_functionality
Typ: Boolean. När True har denna modell begränsad funktionalitet i vissa Odoo-versioner. Används för att särskilja mellan enterprise och community.
25. is_mail_thread
Typ: Boolean. Indikerar om modellen är en mailtråd. Mailtrådmodeller har chatter, meddelanden och följare. Används för modeller som stödjer diskussioner.
26. is_mail_activity
Typ: Boolean. Indikerar om modellen stödjer aktiviteter. Aktivitetmodeller har aktivitetsplanerare och spårning av nästa åtgärd.
Hur denna modell används i affärsarbetsflöden
1. Tekniska inställningar och konfiguration
Administratörer använder menyn för tekniska inställningar för att bläddra bland modeller. ir.model-poster definierar vad som visas i den listan. Varje modell visar sitt namn, beskrivning och antal fält.
2. Hantering av åtkomsträttigheter
När man konfigurerar säkerhet tilldelar administratörer åtkomsträttigheter till grupper. access_ids på ir.model definierar vilka grupper som kan skapa, läsa, uppdatera eller ta bort poster för varje modell.
3. Odoo Studio Anpassning
När användare skapar anpassade modeller i Odoo Studio, skapar Odoo nya ir.model-poster med status manuell. fält_id-relationen fylls med de anpassade Odoo-fälten.
4. API och Integrationsupptäckte
Externa system integreras med Odoo via XML-RPC eller JSON-RPC API. De kan fråga ir.model för att upptäcka tillgängliga modeller och deras struktur. API-modellen i Odoo exponerar detta för introspektion.
5. Modulutveckling och Felsökning
Utvecklare använder ir.model när de bygger moduler. De kontrollerar inherited_model_ids för att förstå Odoo-modellärv. De inspekterar fält_id för att se alla Odoo-fält på en modell.
Hur utvecklare utökar denna modell
Utvecklare utökar sällan ir.model direkt. Istället arbetar de med det när de definierar nya modeller. Modellregistret uppdateras automatiskt när du laddar en modul.
Modellärv
När du använder _inherit = 'res.partner' i din Python, uppdaterar Odoo ir.model-posten för res.partner. inherited_model_ids på din nya modells ir.model-post kommer att länka till föräldern. Detta är Odoo-modellärv i arbete. Den ärvda modellen i Odoo håller registret synkroniserat.
Lägga till Fält
När du lägger till nya Odoo-fält till en modell, skapar Odoo ir.model.fields-poster. Dessa länkar till ir.model via model_id-fältet. ir.model-posten i sig modifieras inte.
Python-tillägg
Du åsidosätter vanligtvis inte ir.model-metoder. Modellen är en del av kärnramverket. Om du behöver anpassa beteendet, utökar du de modeller som ir.model beskriver, inte ir.model själv.
Odoo Studio
Odoo Studio skapar ir.model och ir.model.fields-poster när du bygger anpassade modeller. Ingen kod krävs. Den tillfälliga flaggan särskiljer Odoo tillfälliga modeller från vanliga modeller. Abstrakta modeller (Odoo abstrakt modell) skapar inte ir.model-poster eftersom de inte har någon databas-tabell.
Bästa praxis
- Använd ir.model för introspektion och upptäckte. När du bygger integrationer, fråga ir.model för att lista tillgängliga modeller istället för att hårdkoda.
- Använd model-fältet för uppslag. Det är indexerat. Sök efter modellnamn när du behöver metadata för en specifik modell.
- Kontrollera inherited_model_ids när du bygger anpassade moduler. Förstå arvskedjan innan du utökar.
- Använd API-modellen i Odoo (XML-RPC eller JSON-RPC) för att läsa ir.model. Undvik att modifiera den om du inte bygger ett verktyg som liknar Studio.
- Använd ir.model.fields för fält-nivå introspektion. Field_id-relationen ger dig alla Odoo-fält på en modell.
Vanliga misstag
- Modifiera ir.model-poster direkt. Registreringen hanteras av Odoo. Ändringar kan bryta systemet eller skrivas över vid uppgradering.
- Förväxla inte ir.model med Python-modellklassen. ir.model är databasposten. Python-klassen är den faktiska modellen. De är relaterade men olika.
- Anta inte att alla modeller har ir.model-poster. Odoo abstrakta modellklasser skapar inte databas-tabeller eller ir.model-poster.
- Att glömma att tillfälliga modeller är temporära. Den tillfälliga flaggan betyder att Odoo:s tillfälliga modelldata rensas. Använd inte detta för permanent data.
- Att fråga ir.model utan filtrering. En typisk Odoo-instans har hundratals modeller. Filtrera alltid efter modellnamn eller använd sökdomäner.
Slutsats
Modellen ir.model är registret för alla Odoo-modeller. Den lagrar metadata om varje modell i systemet. Att förstå dess fält och hur det relaterar till ir.model.fields kommer att hjälpa dig att navigera i Odoo:s dataarkitektur.
Oavsett om du är en funktionell konsult som utforskar tekniska inställningar eller en utvecklare som bygger API-integrationer, kommer en solid förståelse av ir.model att spara tid och förhindra fel.
Behöver du hjälp med din Odoo-implementering?
Dasolo hjälper företag att implementera, anpassa och optimera Odoo. Vi specialiserar oss på API-integrationer och Odoo-utveckling. Vårt team har djup erfarenhet av Odoo:s dataarkitektur och modeller som ir.model.
Om du behöver hjälp med din Odoo-implementering, anpassade moduler eller integrationer, är vi här för att hjälpa till. Boka en demo för att diskutera ditt projekt.