Einleitung
In Odoo legen Modelle die Struktur und Speicherung Ihrer Geschäftsdaten fest. Alles — von Angeboten über Rechnungen bis hin zu Ansprechpartnern — existiert als Datensatz in einem Modell und wird so in der Datenbank organisiert.
Für Entwickler und funktionale Berater ist ein gutes Verständnis der Modelle unerlässlich. Modelle sind das Fundament der Odoo-Datenarchitektur: Sie definieren Felder, Beziehungen und die Geschäftslogik, die Ihr System lenkt.
Wo aber speichert Odoo die Informationen über alle vorhandenen Modelle? Genau hier kommt ir.model ins Spiel: Diese Tabelle fungiert als zentrales Register mit Metadaten zu jedem Modell. Ob bei Eigenentwicklungen, API-Inspektionen oder beim Debugging — früher oder später arbeiten Sie mit ir.model.
Was ist das ir.model?
Das ir.model ist im Kern das Metadaten-Register von Odoo: Für jedes definierte Modell existiert ein Eintrag in dieser Tabelle. Sobald Sie ein neues Modell per Python anlegen oder mit Odoo Studio erzeugen, legt Odoo ein entsprechendes ir.model-Record an oder aktualisiert es.
Dieses Modell gehört zum Basismodul von Odoo und ist Teil des Framework-Kerns. Egal ob reguläres Modell, abstraktes Modell oder transientes (temporäres) Modell — zu jedem existierenden Modell gibt es einen Eintrag in ir.model (außer bei reinen abstrakten Klassen ohne Datenbanktabelle).
Die Definition von ir.model liegt im Core-Modul; eng verknüpft ist die Tabelle ir.model.fields, die Metainformationen zu einzelnen Feldern speichert. Zusammen ermöglichen diese beiden Modelle die Programmiereinblicke und Reflexion, mit denen Odoo seine Strukturen dynamisch handhabt.
Entwickler greifen auf ir.model, wenn sie verfügbare Modelle auflisten, Vererbungsbäume prüfen oder generische Werkzeuge bauen wollen, die mit beliebigen Modellen arbeiten. Über die Odoo-API (XML-RPC/JSON-RPC) lassen sich diese Metadaten ebenfalls auslesen.
Wichtige Felder im Modell
Die folgenden Felder in ir.model sind besonders relevant. Wenn Sie diese kennen, finden Sie sich schneller im Modell-Register zurecht und können gezielter arbeiten.
1. name
Typ: Char. Menschlich lesbarer Modellname, meist übersetzbar. Er taucht in den Technischen Einstellungen und Entwicklerwerkzeugen auf und dient als Label beim Durchsuchen der Modelle.
2. model
Typ: Char. Der technische Modellname, den Sie im Code verwenden (z. B. res.partner oder sale.order). Dieses Feld ist erforderlich und indexiert, damit Abfragen schnell laufen.
3. info
Typ: Text. Freitext für zusätzliche Hinweise oder Dokumentation zum Modell. Oft leer, aber nützlich für interne Anmerkungen.
4. state
Typ: Selection. Zeigt an, ob das Modell aus einem Odoo-Modul stammt (base) oder manuell angelegt wurde (manual), etwa per Studio. Base-Modelle sind stärker geschützt, manuelle Modelle lassen sich flexibler anpassen.
5. transient
Typ: Boolean. Kennzeichnet temporäre (transiente) Modelle. Bei True werden Datensätze automatisch bereinigt — typisch für Assistenten und temporäre Eingaben.
6. field_id
Typ: One2many (ir.model.fields). Liste aller Felder, die auf diesem Modell definiert sind. Jedes ir.model.fields-Record beschreibt ein Feld mit Name, Typ und weiteren Attributen.
7. access_ids
Typ: One2many (ir.model.access). Legt die Zugriffsrechte fest: welche Gruppen Leserechte, Schreibrechte, Erstellen- und Löschrechte haben. Kernbestandteil der Sicherheitskonfiguration.
8. rule_ids
Typ: One2many (ir.rule). Record-Regeln, die auf Zeilenebene einschränken, welche Datensätze ein Benutzer sehen oder bearbeiten darf.
9. inherited_model_ids
Typ: Many2many (ir.model). Referenzen auf übergeordnete Modelle bei Modellvererbung. Wenn ein Modell erweitert wird, erscheinen die Elternmodelle hier als Verknüpfung.
10. modules
Typ: Char. Ein berechnetes Feld, das auflistet, in welchen Modulen das Modell definiert oder erweitert wird — hilfreich, um Abhängigkeiten nachzuvollziehen.
11. sort
Typ: Integer. Reihenfolge für die Anzeige in den Technischen Einstellungen; kleinere Werte erscheinen oben und helfen beim Ordnen langer Listen.
12. constrains
Typ: Text. Python-Constraint-Definitionen (z. B. @api.constrains). Hier kann Validierungslogik in Textform hinterlegt werden.
13. post_constrains
Typ: Text. Post-Constraint-Code — ähnlich wie constrains, aber für nachgelagerte Prüfungen oder Aktionen.
14. sql_constraints
Typ: Text. Definitionen für Datenbank-Constraints (z. B. UNIQUE). Diese stellen Integrität auf DB-Ebene sicher.
15. view_ids
Typ: One2many (ir.ui.view). Berechnetes Feld mit den Views, die diesem Modell zugeordnet sind — nützlich für UI-Inspektionen.
16. record_count
Typ: Integer. Berechnetes Feld mit der Anzahl der Datensätze im Modell — praktisch für Analysen und Monitoring.
17. display_name
Typ: Char. Darstellungsname, der beispielsweise in Many2one-Feldern angezeigt wird; häufig eine Kombination aus name und model.
18. create_date
Typ: Datetime. Zeitpunkt der Anlage des ir.model-Eintrags; wird von Odoo automatisch gepflegt.
19. create_uid
Typ: Many2one (res.users). Benutzer, der den Eintrag angelegt hat — wichtig für Audits.
20. write_date
Typ: Datetime. Zeitpunkt der letzten Änderung; ebenfalls automatisch verwaltet.
21. write_uid
Typ: Many2one (res.users). Benutzer, der zuletzt bearbeitet hat — nützlich für Nachvollziehbarkeit.
22. active
Typ: Boolean. Weicher Lösch- bzw. Archivierungsindikator. Auf False gesetzte Einträge gelten als inaktiv oder veraltet.
23. id
Typ: Integer. Die eindeutige Datenbank-ID des ir.model-Records; wird oft in API-Aufrufen verwendet.
24. restrict_functionality
Typ: Boolean. Markiert Modelle mit eingeschränktem Funktionsumfang in bestimmten Odoo-Editionen (z. B. Enterprise vs. Community).
25. is_mail_thread
Typ: Boolean. Gibt an, ob das Modell über die Chatter-/Mail-Funktionalität verfügt (Nachrichten, Follower).
26. is_mail_activity
Typ: Boolean. Zeigt, ob das Modell Aktivitäten unterstützt (Planner, nächste Aktion).
Wie dieses Modell in Geschäftsprozessen eingesetzt wird
1. Technische Einstellungen und Konfiguration
Administratoren nutzen das Menü der Technischen Einstellungen, um Modelle zu durchsuchen. Die ir.model-Einträge bestimmen, welche Modelle dort auftauchen und zeigen zentrale Infos wie Namen, Beschreibung und Anzahl der Felder an.
2. Verwaltung von Zugriffsrechten
Zur Sicherheitskonfiguration werden Gruppenrechte vergeben. Die access_ids in ir.model legen fest, welche Gruppen welche CRUD-Rechte auf ein Modell haben — ein zentraler Hebel für Berechtigungen.
3. Anpassungen mit Odoo Studio
Wenn Anwender in Studio neue Modelle erstellen, erzeugt Odoo entsprechende ir.model- und ir.model.fields-Einträge mit dem Status manual. So werden selbst benutzerdefinierte Strukturen sauber im System registriert.
4. API- und Integrations-Discovery
Externe Anwendungen können über XML-RPC oder JSON-RPC die ir.model-Daten abfragen, um verfügbare Modelle und deren Aufbau zu entdecken — ideal, um Integrationen dynamisch aufzusetzen statt hart zu codieren.
5. Modulentwicklung und Debugging
Beim Entwickeln prüfen Sie ir.model, um Vererbungen nachzuvollziehen (inherited_model_ids) und alle Felder eines Modells über field_id zu inspizieren — das vereinfacht Erweiterungen und Fehlersuche.
Wie Entwickler das Modell erweitern
Direkt am ir.model zu arbeiten ist selten nötig. Meist interagieren Entwickler indirekt: Beim Laden eines Moduls aktualisiert Odoo das Register automatisch, sodass man nur neue Modelle oder Felder definiert.
Modellvererbung
Wenn Sie in Python etwa _inherit = 'res.partner' verwenden, aktualisiert Odoo das ir.model für res.partner und verlinkt das neue Modell über inherited_model_ids mit dem Elternmodell. So bleibt das Registry konsistent und Vererbungsbeziehungen sichtbar.
Felder hinzufügen
Beim Ergänzen von Feldern legt Odoo neue ir.model.fields-Einträge an, die über model_id mit dem entsprechenden ir.model verbunden sind. Das zentrale ir.model-Record selbst wird dabei normalerweise nicht direkt verändert.
Python-Erweiterungen
Ir.model-Methoden überschreibt man in der Praxis kaum — das Modell ist Teil des Kernframeworks. Falls Verhalten angepasst werden muss, erweitert man in der Regel die Modelle, die durch ir.model beschrieben werden, statt ir.model selbst zu patchen.
Odoo Studio
Odoo Studio erzeugt automatisch ir.model- und ir.model.fields-Einträge für selbst erstellte Modelle — komplett ohne Code. Transiente Modelle werden durch das transient-Flag gekennzeichnet; abstrakte Modelle ohne eigene DB-Tabelle führen dagegen nicht zu ir.model-Einträgen.
Best Practices
- Nutzen Sie ir.model zur Laufzeit-Inspektion: Bei Integrationen fragen Sie die Modellliste dort ab, statt Modellnamen zu hardcodieren — das macht Ihre Integrationen flexibler und update-resistenter.
- Suchen Sie Modelle über das Feld model: Es ist indexiert und damit schnell. Wenn Sie Metadaten zu einem bestimmten Modell brauchen, ist die Suche nach dessen technischem Namen der richtige Weg.
- Prüfen Sie inherited_model_ids vor Erweiterungen: Verstehen Sie die Vererbungsstruktur, bevor Sie ein Modell anpassen, um Seiteneffekte zu vermeiden.
- Lesen Sie ir.model über die API (XML-RPC/JSON-RPC) aus: So bauen Sie Integrationen oder Studio-ähnliche Tools ohne direkte Änderungen an der Registry.
- Verwenden Sie ir.model.fields für Detail-Inspektionen: field_id listet alle Felder mit Typen und Attributen — ideal für dynamische UI-Generatoren oder Migrationsskripte.
Häufige Fehler
- Modifizieren Sie ir.model nicht direkt: Das Registry-Management übernimmt Odoo; manuelle Änderungen können das System destabilisieren oder bei Updates überschrieben werden.
- Ir.model nicht mit der Python-Klasse verwechseln: ir.model ist ein Datenbank-Record mit Metadaten, die eigentliche Logik lebt in der Python-Modellklasse — beides hängt zusammen, ist aber nicht identisch.
- Nicht alle Klassen erzeugen ir.model-Einträge: Abstrakte Modelle ohne eigene Tabelle werden nicht als ir.model-Records angelegt.
- Transiente Modelle sind vergänglich: Das transient-Flag bedeutet, Daten werden regelmäßig bereinigt — solche Modelle eignen sich nicht für dauerhafte Speicherung.
- Ir.model ohne Filter abfragen ist ineffizient: Produktivsysteme enthalten hunderte Modelle — filtern Sie daher gezielt nach model-Namen oder passenden Suchdomänen.
Fazit
Ir.model ist das zentrale Register aller Odoo-Modelle und speichert die Metadaten, die Sie brauchen, um das System zu verstehen. Wenn Sie die wichtigsten Felder und die Beziehung zu ir.model.fields kennen, navigieren Sie sicherer durch Odoos Datenarchitektur.
Egal ob Sie als Berater die Technischen Einstellungen sondieren oder als Entwickler API-Integrationen bauen: Wer ir.model versteht, arbeitet schneller, vermeidet Fehler und trifft bessere Architekturentscheidungen.
Brauchen Sie Unterstützung bei Ihrer Odoo-Einführung?
Dasolo unterstützt Unternehmen bei Einführung, Anpassung und Optimierung von Odoo. Unser Schwerpunkt liegt auf API-Integrationen und Individualentwicklung — mit tiefem Verständnis der Odoo-Datenarchitektur und Modellen wie ir.model.
Wenn Sie Hilfe bei Implementierung, individuellen Modulen oder Integrationen benötigen, sprechen Sie uns an. Vereinbaren Sie eine Demo um Ihr Projekt zu besprechen.