Inleiding
In Odoo definiëren modellen hoe gegevens zijn gestructureerd en opgeslagen in de database. Elk stuk bedrijfsgegevens waarmee u werkt, van verkooporders tot facturen tot contacten, bevindt zich in een model.
Het begrijpen van Odoo-modellen is essentieel voor zowel ontwikkelaars als functionele consultants. Modellen zijn de basis van de Odoo-gegevensarchitectuur. Ze definiëren Odoo-velden, relaties en bedrijfslogica.
Maar waar slaat Odoo informatie op over elk model in het systeem? Het antwoord is ir.model. Dit model in Odoo is het register dat metadata over alle andere modellen bevat. Of u nu aangepaste modules bouwt, de API verkent of Odoo debugt, u zult ir.model tegenkomen.
Wat is het ir.model Model
Het ir.model-model is het metadata-register voor alle Odoo-modellen. Het slaat één record per model in het systeem op. Wanneer je een nieuw model in Python definieert of er een maakt via Odoo Studio, creëert of werkt Odoo een ir.model-record bij.
Dit model in Odoo wordt gebruikt door de basismodule. Het maakt deel uit van het kernframework. Elk Odoo-model, of het nu een regulier model, een Odoo abstract model of een Odoo transient model is, heeft een overeenkomstige ir.model-invoer.
Het model is gedefinieerd in de basismodule. Het is nauw verbonden met ir.model.fields, dat metadata over elk Odoo-veld op elk model opslaat. Samen vormen ir.model en ir.model.fields de ruggengraat van Odoo's introspectie- en reflectiemogelijkheden.
Ontwikkelaars gebruiken ir.model wanneer ze beschikbare modellen moeten opsommen, modelovererving moeten controleren of dynamische tools moeten bouwen die met elk model werken. Het API-model in Odoo stelt ir.model beschikbaar via XML-RPC en JSON-RPC.
Belangrijke Velden in het Model
Hier zijn de belangrijkste Odoo-velden in het ir.model-model. Het begrijpen hiervan zal je helpen om effectief met het modelregister te werken.
1. naam
Type: Char. Dit veld slaat de leesbare beschrijving van het model op. Het is vertaalbaar en wordt weergegeven in de Technische Instellingen en in ontwikkelaarstools. Het is het label dat je ziet bij het doorbladeren van modellen.
2. model
Type: Char. De technische naam van het model. Dit is de string die je gebruikt in Python-code, zoals res.partner of sale.order. Het is vereist en geïndexeerd voor snelle opzoekingen.
3. info
Type: Text. Aanvullende informatie of notities over het model. Gebruikt voor documentatie en intern gebruik. Kan voor de meeste modellen leeg zijn.
4. staat
Type: Selectie. Geeft aan of het model basis (van Odoo-modules) of handmatig (gemaakt via Odoo Studio of aangepaste code) is. Basismodellen zijn beschermd. Handmatige modellen kunnen vrijer worden aangepast.
5. tijdelijk
Type: Boolean. Wanneer waar, is dit model een Odoo tijdelijk model. Tijdelijke modellen zijn tijdelijk. Hun records worden automatisch opgeschoond. Gebruikt voor wizard en tijdelijke gegevens.
6. field_id
Type: One2many (ir.model.fields). De lijst van Odoo-velden die op dit model zijn gedefinieerd. Elk ir.model.fields-record beschrijft één veld: de naam, het type en andere attributen.
7. access_ids
Type: One2many (ir.model.access). Toegangsrechten voor dit model. Elk record definieert welke groepen records kunnen aanmaken, lezen, bijwerken of verwijderen. Gebruikt voor beveiliging.
8. rule_ids
Type: One2many (ir.rule). Recordregels voor dit model. Recordregels beperken welke records gebruikers kunnen zien. Gebruikt voor rij-niveau beveiliging.
9. inherited_model_ids
Type: Many2many (ir.model). De bovenliggende modellen bij het gebruik van Odoo modelovererving. Wanneer je een model in Odoo erft, linkt het kindmodel hier naar zijn ouder. Dit is Odoo erfmodel in actie.
10. modules
Type: Char. Een berekend veld dat de modules opsomt waarin dit model is gedefinieerd. Voor modellen die door meerdere modules zijn uitgebreid, toont dit ze allemaal. Nuttig voor het begrijpen van afhankelijkheden.
11. sort
Type: Integer. Weergavevolgorde voor het model in het menu Technische Instellingen. Lagere waarden verschijnen eerst. Gebruikt voor het organiseren van de modellenlijst.
12. constrains
Type: Text. Python-constraintdefinities. Slaat de code op voor @api.constrains-decorators. Gebruikt wanneer het model aangepaste validatielogica heeft.
13. post_constrains
Type: Text. Python post-constraintdefinities. Vergelijkbaar met constrains, maar voor post-validatie. Gebruikt voor geavanceerde validatiescenario's.
14. sql_constraints
Type: Text. SQL-constraintdefinities. Database-niveau beperkingen zoals unieke indexen. Zorgt voor gegevensintegriteit op database-niveau.
15. view_ids
Type: One2many (ir.ui.view). Berekend veld dat de weergaven opsomt die aan dit model zijn gekoppeld. Gebruikt voor introspectie en weergavebeheer.
16. record_count
Type: Integer. Gecalculeerd veld dat het aantal records in dit model toont. Nuttig voor rapportage en om te begrijpen hoeveel gegevens een model bevat.
17. display_name
Type: Char. Gecalculeerd veld voor de weergave. Gebruikt wanneer het record wordt weergegeven in lijsten en relaties. Combineert typisch naam en model.
18. create_date
Type: Datetime. Slaat de datum en tijd op wanneer het record is aangemaakt. Automatisch beheerd door Odoo.
19. create_uid
Type: Many2one (res.users). De gebruiker die het record heeft aangemaakt. Gebruikt voor auditing en tracking.
20. write_date
Type: Datetime. Slaat de datum en tijd van de laatste wijziging op. Ook automatisch beheerd.
21. write_uid
Type: Many2one (res.users). De gebruiker die het record voor het laatst heeft gewijzigd. Gebruikt voor auditing.
22. active
Type: Boolean. Soft delete-vlag. Wanneer False, wordt het record gearchiveerd. Gebruikt voor verouderde modellen.
23. id
Type: Integer. De database-ID. Unieke identificator voor elk ir.model-record. Gebruikt bij het verwijzen naar het model in API-aanroepen.
24. restrict_functionality
Type: Boolean. Wanneer True, heeft dit model beperkte functionaliteit in bepaalde Odoo-edities. Gebruikt voor differentiatie tussen enterprise en community.
25. is_mail_thread
Type: Boolean. Geeft aan of het model een mailthread is. Mailthread-modellen hebben chatter, berichten en volgers. Gebruikt voor modellen die discussies ondersteunen.
26. is_mail_activity
Type: Boolean. Geeft aan of het model activiteiten ondersteunt. Activiteitsmodellen hebben de activiteitenplanner en tracking van de volgende actie.
Hoe Dit Model Wordt Gebruikt in Bedrijfsworkflows
1. Technische Instellingen en Configuratie
Beheerders gebruiken het menu Technische Instellingen om modellen te doorbladeren. De ir.model-records definiëren wat in die lijst verschijnt. Elk model toont zijn naam, beschrijving en aantal velden.
2. Beheer van Toegangsrechten
Bij het configureren van beveiliging wijzen beheerders toegangsrechten toe aan groepen. De access_ids op ir.model definiëren welke groepen records kunnen aanmaken, lezen, bijwerken of verwijderen voor elk model.
3. Odoo Studio Aanpassing
Wanneer gebruikers aangepaste modellen aanmaken in Odoo Studio, maakt Odoo nieuwe ir.model-records aan met de status handmatig. De field_id-relatie wordt gevuld met de aangepaste Odoo-velden.
4. API en Integratie Ontdekking
Externe systemen integreren met Odoo via de XML-RPC of JSON-RPC API. Ze kunnen ir.model raadplegen om beschikbare modellen en hun structuur te ontdekken. Het API-model in Odoo stelt dit beschikbaar voor introspectie.
5. Module Ontwikkeling en Debuggen
Ontwikkelaars gebruiken ir.model bij het bouwen van modules. Ze controleren inherited_model_ids om de Odoo-modelovererving te begrijpen. Ze inspecteren field_id om alle Odoo-velden op een model te zien.
Hoe Ontwikkelaars Dit Model Uitbreiden
Ontwikkelaars breiden ir.model zelden direct uit. In plaats daarvan werken ze ermee wanneer ze nieuwe modellen definiëren. Het modelregister wordt automatisch bijgewerkt wanneer je een module laadt.
Modelovererving
Wanneer je _inherit = 'res.partner' in je Python gebruikt, werkt Odoo het ir.model-record voor res.partner bij. De inherited_model_ids op het ir.model-record van je nieuwe model zullen linken naar de ouder. Dit is Odoo-modelovererving in actie. Het erfmodel in Odoo houdt het register synchroon.
Velden Toevoegen
Wanneer je nieuwe Odoo-velden aan een model toevoegt, maakt Odoo ir.model.fields-records aan. Deze linken naar ir.model via het model_id-veld. Het ir.model-record zelf wordt niet gewijzigd.
Python Extensies
Je overschrijft doorgaans geen ir.model-methoden. Het model maakt deel uit van het kernframework. Als je het gedrag wilt aanpassen, breid je de modellen uit die ir.model beschrijft, niet ir.model zelf.
Odoo Studio
Odoo Studio creëert ir.model- en ir.model.fields-records wanneer je aangepaste modellen bouwt. Geen code vereist. De transient-vlag onderscheidt Odoo transient modellen van reguliere modellen. Abstracte modellen (Odoo abstract model) creëren geen ir.model-records omdat ze geen database-tabel hebben.
Beste Praktijken
- Gebruik ir.model voor introspectie en ontdekking. Bij het bouwen van integraties, query ir.model om beschikbare modellen op te sommen in plaats van hardcoded.
- Gebruik het modelveld voor opzoekingen. Het is geïndexeerd. Zoek op modelnaam wanneer je de metadata van een specifiek model nodig hebt.
- Controleer inherited_model_ids bij het bouwen van aangepaste modules. Begrijp de erfelijkheidsketen voordat je uitbreidt.
- Gebruik het API-model in Odoo (XML-RPC of JSON-RPC) om ir.model te lezen. Vermijd het te wijzigen, tenzij je een Studio-achtige tool bouwt.
- Gebruik ir.model.fields voor veldniveau introspectie. De field_id-relatie geeft je alle Odoo-velden op een model.
Veelvoorkomende Fouten
- Directe wijziging van ir.model-records. Het register wordt beheerd door Odoo. Wijzigingen kunnen het systeem breken of worden overschreven bij een upgrade.
- Verwarring tussen ir.model en de Python-modelklasse. ir.model is het database-record. De Python-klasse is het daadwerkelijke model. Ze zijn gerelateerd maar verschillend.
- Aannemen dat alle modellen ir.model-records hebben. Odoo abstract modelklassen creëren geen databastabellen of ir.model-records.
- Vergeten dat tijdelijke modellen tijdelijk zijn. De tijdelijke vlag betekent dat de Odoo tijdelijke modelgegevens worden opgeschoond. Gebruik het niet voor permanente gegevens.
- Het opvragen van ir.model zonder te filteren. Een typische Odoo-instantie heeft honderden modellen. Filter altijd op modelnaam of gebruik zoekdomeinen.
Conclusie
Het ir.model-model is het register van alle Odoo-modellen. Het slaat metadata op over elk model in het systeem. Begrijpen wat de velden zijn en hoe het zich verhoudt tot ir.model.fields zal je helpen om door de Odoo-gegevensarchitectuur te navigeren.
Of je nu een functionele consultant bent die de technische instellingen verkent of een ontwikkelaar die API-integraties bouwt, een goed begrip van ir.model zal tijd besparen en fouten voorkomen.
Hulp Nodig Bij Uw Odoo Implementatie?
Dasolo helpt bedrijven bij het implementeren, aanpassen en optimaliseren van Odoo. We zijn gespecialiseerd in API-integraties en Odoo-ontwikkeling. Ons team heeft diepgaande ervaring met de Odoo-gegevensarchitectuur en modellen zoals ir.model.
Als je hulp nodig hebt bij je Odoo-implementatie, aangepaste modules of integraties, zijn we hier om te helpen. Boek een demo om je project te bespreken.