Einführung
In Odoo definieren Modelle, wie Daten strukturiert und in der Datenbank gespeichert werden. Jedes Stück Geschäftsdaten, mit dem Sie arbeiten, von Verkaufsaufträgen über Rechnungen bis hin zu Kontakten, lebt in einem Modell.
Das Verständnis von Odoo-Modellen ist sowohl für Entwickler als auch für funktionale Berater unerlässlich. Modelle sind die Grundlage der Odoo-Datenarchitektur. Sie definieren Odoo-Felder, Beziehungen und Geschäftslogik.
Aber wo speichert Odoo Informationen über jedes Modell im System? Die Antwort ist ir.model. Dieses Modell in Odoo ist das Register, das Metadaten über alle anderen Modelle enthält. Egal, ob Sie benutzerdefinierte Module erstellen, die API erkunden oder Odoo debuggen, Sie werden auf ir.model stoßen.
Was ist das ir.model Modell
Das ir.model-Modell ist das Metadaten-Register für alle Odoo-Modelle. Es speichert einen Datensatz pro Modell im System. Wenn Sie ein neues Modell in Python definieren oder eines über Odoo Studio erstellen, erstellt oder aktualisiert Odoo einen ir.model-Datensatz.
Dieses Modell in Odoo wird vom Basismodul verwendet. Es ist Teil des Kernframeworks. Jedes Odoo-Modell, egal ob es sich um ein reguläres Modell, ein Odoo-Abstract-Modell oder ein Odoo-transientes Modell handelt, hat einen entsprechenden ir.model-Eintrag.
Das Modell ist im Basismodul definiert. Es steht in engem Zusammenhang mit ir.model.fields, das Metadaten über jedes Odoo-Feld in jedem Modell speichert. Zusammen bilden ir.model und ir.model.fields das Rückgrat von Odoos Introspektions- und Reflexionsfähigkeiten.
Entwickler verwenden ir.model, wenn sie verfügbare Modelle auflisten, die Modellvererbung überprüfen oder dynamische Werkzeuge erstellen müssen, die mit jedem Modell arbeiten. Das API-Modell in Odoo stellt ir.model über XML-RPC und JSON-RPC zur Verfügung.
Wichtige Felder im Modell
Hier sind die wichtigsten Odoo-Felder im ir.model-Modell. Das Verständnis dieser wird Ihnen helfen, effektiv mit dem Modellregister zu arbeiten.
1. name
Typ: Char. Dieses Feld speichert die menschenlesbare Beschreibung des Modells. Es ist übersetzbar und wird in den technischen Einstellungen und in Entwicklertools angezeigt. Es ist das Label, das Sie beim Durchsuchen von Modellen sehen.
2. model
Typ: Char. Der technische Name des Modells. Dies ist der String, den Sie im Python-Code verwenden, wie res.partner oder sale.order. Es ist erforderlich und indiziert für schnelle Suchen.
3. info
Typ: Text. Zusätzliche Informationen oder Notizen über das Modell. Wird für Dokumentation und interne Zwecke verwendet. Kann für die meisten Modelle leer sein.
4. state
Typ: Auswahl. Gibt an, ob das Modell Basis (aus Odoo-Modulen) oder manuell (über Odoo Studio oder benutzerdefinierten Code erstellt) ist. Basismodelle sind geschützt. Manuelle Modelle können freier modifiziert werden.
5. transient
Typ: Boolean. Wenn wahr, ist dieses Modell ein Odoo-transientes Modell. Transiente Modelle sind temporär. Ihre Datensätze werden automatisch bereinigt. Wird für Wizards und temporäre Daten verwendet.
6. field_id
Typ: One2many (ir.model.fields). Die Liste der Odoo-Felder, die in diesem Modell definiert sind. Jeder ir.model.fields-Datensatz beschreibt ein Feld: seinen Namen, Typ und andere Attribute.
7. access_ids
Typ: One2many (ir.model.access). Zugriffsrechte für dieses Modell. Jeder Datensatz definiert, welche Gruppen Datensätze erstellen, lesen, aktualisieren oder löschen können. Wird für Sicherheit verwendet.
8. rule_ids
Typ: One2many (ir.rule). Aufzeichnungsregeln für dieses Modell. Aufzeichnungsregeln schränken ein, welche Datensätze Benutzer sehen können. Wird für zeilenbasierte Sicherheit verwendet.
9. inherited_model_ids
Typ: Many2many (ir.model). Die übergeordneten Modelle bei Verwendung der Odoo-Modellerbschaft. Wenn Sie ein Modell in Odoo erben, verknüpft das Kindmodell hier mit seinem Elternteil. So funktioniert die Odoo-Modellerbschaft.
10. modules
Typ: Char. Ein berechnetes Feld, das die Module auflistet, in denen dieses Modell definiert ist. Für Modelle, die von mehreren Modulen erweitert werden, werden alle angezeigt. Nützlich zum Verständnis von Abhängigkeiten.
11. sort
Typ: Integer. Anzeige-Reihenfolge für das Modell im Menü Technische Einstellungen. Niedrigere Werte erscheinen zuerst. Wird zur Organisation der Modellliste verwendet.
12. constrains
Typ: Text. Python-Beschränkungsdefinitionen. Speichert den Code für @api.constrains-Dekoratoren. Wird verwendet, wenn das Modell benutzerdefinierte Validierungslogik hat.
13. post_constrains
Typ: Text. Python-Post-Beschränkungsdefinitionen. Ähnlich wie constrains, aber für die Nachvalidierung. Wird für fortgeschrittene Validierungsszenarien verwendet.
14. sql_constraints
Typ: Text. SQL-Beschränkungsdefinitionen. Datenbankebene-Beschränkungen wie eindeutige Indizes. Gewährleistet die Datenintegrität auf Datenbankebene.
15. view_ids
Typ: One2many (ir.ui.view). Berechnetes Feld, das die mit diesem Modell verknüpften Ansichten auflistet. Wird für Introspektion und Ansichtsverwaltung verwendet.
16. record_count
Typ: Ganzzahl. Berechnetes Feld, das die Anzahl der Datensätze in diesem Modell anzeigt. Nützlich für Berichterstattung und um zu verstehen, wie viele Daten ein Modell enthält.
17. display_name
Typ: Char. Berechnetes Feld für die Anzeige. Wird verwendet, wenn der Datensatz in Listen und Beziehungen angezeigt wird. Kombiniert typischerweise Name und Modell.
18. create_date
Typ: Datetime. Speichert das Datum und die Uhrzeit, zu der der Datensatz erstellt wurde. Wird automatisch von Odoo verwaltet.
19. create_uid
Typ: Many2one (res.users). Der Benutzer, der den Datensatz erstellt hat. Wird für die Prüfung und Nachverfolgung verwendet.
20. write_date
Typ: Datetime. Speichert das Datum und die Uhrzeit der letzten Änderung. Wird ebenfalls automatisch verwaltet.
21. write_uid
Typ: Many2one (res.users). Der Benutzer, der den Datensatz zuletzt geändert hat. Wird für die Prüfung verwendet.
22. aktiv
Typ: Boolean. Soft-Delete-Flag. Wenn False, wird der Datensatz archiviert. Wird für veraltete Modelle verwendet.
23. id
Typ: Integer. Die Datenbank-ID. Eindeutiger Identifikator für jeden ir.model-Datensatz. Wird verwendet, wenn das Modell in API-Aufrufen referenziert wird.
24. restrict_functionality
Typ: Boolean. Wenn True, hat dieses Modell in bestimmten Odoo-Versionen eingeschränkte Funktionalität. Wird zur Unterscheidung zwischen Enterprise und Community verwendet.
25. is_mail_thread
Typ: Boolean. Gibt an, ob das Modell ein Mail-Thread ist. Mail-Thread-Modelle haben Chatter, Nachrichten und Follower. Wird für Modelle verwendet, die Diskussionen unterstützen.
26. is_mail_activity
Typ: Boolean. Gibt an, ob das Modell Aktivitäten unterstützt. Aktivitätsmodelle haben den Aktivitätsplaner und die Verfolgung der nächsten Aktionen.
Wie dieses Modell in Geschäftsabläufen verwendet wird
1. Technische Einstellungen und Konfiguration
Administratoren verwenden das Menü Technische Einstellungen, um Modelle zu durchsuchen. Die ir.model-Datensätze definieren, was in dieser Liste erscheint. Jedes Modell zeigt seinen Namen, seine Beschreibung und die Anzahl der Felder an.
2. Verwaltung der Zugriffsrechte
Bei der Konfiguration der Sicherheit weisen Administratoren Zugriffsrechte Gruppen zu. Die access_ids auf ir.model definieren, welche Gruppen Datensätze für jedes Modell erstellen, lesen, aktualisieren oder löschen können.
3. Odoo Studio Anpassung
Wenn Benutzer benutzerdefinierte Modelle in Odoo Studio erstellen, erstellt Odoo neue ir.model-Datensätze mit dem Status manuell. Das Feld field_id wird mit den benutzerdefinierten Odoo-Feldern gefüllt.
4. API- und Integrationsentdeckung
Externe Systeme integrieren sich über die XML-RPC- oder JSON-RPC-API mit Odoo. Sie können ir.model abfragen, um verfügbare Modelle und deren Struktur zu entdecken. Das API-Modell in Odoo macht dies zur Einsichtnahme verfügbar.
5. Modulentwicklung und Debugging
Entwickler verwenden ir.model beim Erstellen von Modulen. Sie überprüfen inherited_model_ids, um die Vererbung von Odoo-Modellen zu verstehen. Sie inspizieren field_id, um alle Odoo-Felder in einem Modell zu sehen.
Wie Entwickler dieses Modell erweitern
Entwickler erweitern ir.model selten direkt. Stattdessen arbeiten sie damit, wenn sie neue Modelle definieren. Das Modellregister wird automatisch aktualisiert, wenn Sie ein Modul laden.
Modellvererbung
Wenn Sie _inherit = 'res.partner' in Ihrem Python verwenden, aktualisiert Odoo den ir.model-Datensatz für res.partner. Die inherited_model_ids im ir.model-Datensatz Ihres neuen Modells verlinken zum Elternmodell. Dies ist die Vererbung von Odoo-Modellen in Aktion. Das Vererbungsmodell in Odoo hält das Register synchron.
Felder hinzufügen
Wenn Sie neue Odoo-Felder zu einem Modell hinzufügen, erstellt Odoo ir.model.fields-Datensätze. Diese verlinken über das Feld model_id zu ir.model. Der ir.model-Datensatz selbst wird nicht verändert.
Python-Erweiterungen
Sie überschreiben normalerweise keine ir.model-Methoden. Das Modell ist Teil des Kernframeworks. Wenn Sie das Verhalten anpassen müssen, erweitern Sie die Modelle, die ir.model beschreibt, nicht ir.model selbst.
Odoo Studio
Odoo Studio erstellt ir.model- und ir.model.fields-Datensätze, wenn Sie benutzerdefinierte Modelle erstellen. Kein Code erforderlich. Das transient-Flag unterscheidet das Odoo-transiente Modell von regulären Modellen. Abstrakte Modelle (Odoo abstraktes Modell) erstellen keine ir.model-Datensätze, da sie keine Datenbanktabelle haben.
Best Practices
- Verwenden Sie ir.model für Introspektion und Entdeckung. Beim Erstellen von Integrationen fragen Sie ir.model ab, um verfügbare Modelle aufzulisten, anstatt sie fest zu codieren.
- Verwenden Sie das Modellfeld für Abfragen. Es ist indiziert. Suchen Sie nach dem Modellnamen, wenn Sie die Metadaten eines bestimmten Modells benötigen.
- Überprüfen Sie inherited_model_ids, wenn Sie benutzerdefinierte Module erstellen. Verstehen Sie die Vererbungskette, bevor Sie erweitern.
- Verwenden Sie das API-Modell in Odoo (XML-RPC oder JSON-RPC), um ir.model zu lesen. Vermeiden Sie es, es zu ändern, es sei denn, Sie erstellen ein Studio-ähnliches Tool.
- Verwenden Sie ir.model.fields für die Feldebene Introspektion. Die field_id-Beziehung gibt Ihnen alle Odoo-Felder eines Modells.
Häufige Fehler
- Direkte Modifikation von ir.model-Datensätzen. Das Register wird von Odoo verwaltet. Änderungen können das System beschädigen oder bei einem Upgrade überschrieben werden.
- Verwechseln von ir.model mit der Python-Modellklasse. ir.model ist der Datenbankdatensatz. Die Python-Klasse ist das tatsächliche Modell. Sie sind verwandt, aber unterschiedlich.
- Annehmen, dass alle Modelle ir.model-Datensätze haben. Odoo abstrakte Modellklassen erstellen keine Datenbanktabellen oder ir.model-Datensätze.
- Vergessen Sie, dass transiente Modelle vorübergehend sind. Das transiente Flag bedeutet, dass die Daten des Odoo transienten Modells bereinigt werden. Verwenden Sie es nicht für permanente Daten.
- Abfragen von ir.model ohne Filterung. Eine typische Odoo-Instanz hat Hunderte von Modellen. Filtern Sie immer nach Modellnamen oder verwenden Sie Suchdomänen.
Fazit
Das ir.model-Modell ist das Register aller Odoo-Modelle. Es speichert Metadaten über jedes Modell im System. Das Verständnis seiner Felder und wie es sich auf ir.model.fields bezieht, wird Ihnen helfen, die Odoo-Datenarchitektur zu navigieren.
Egal, ob Sie ein funktionaler Berater sind, der technische Einstellungen erkundet, oder ein Entwickler, der API-Integrationen erstellt, ein solides Verständnis von ir.model wird Zeit sparen und Fehler verhindern.
Brauchen Sie Hilfe bei Ihrer Odoo-Implementierung?
Dasolo hilft Unternehmen bei der Implementierung, Anpassung und Optimierung von Odoo. Wir sind auf API-Integrationen und Odoo-Entwicklung spezialisiert. Unser Team hat umfassende Erfahrung mit der Odoo-Datenarchitektur und Modellen wie ir.model.
Wenn Sie Hilfe bei Ihrer Odoo-Implementierung, benutzerdefinierten Modulen oder Integrationen benötigen, sind wir hier, um zu helfen. Buchen Sie eine Demo um Ihr Projekt zu besprechen.