Zum Inhalt springen

Related Field in Odoo: Der umfassende Leitfaden

Praxisleitfaden zum Odoo-Feld „Related“: Funktionsweise, Einsatzszenarien und Konfiguration in Studio sowie per Python
6. März 2026 durch
Related Field in Odoo: Der umfassende Leitfaden
Dasolo
| Noch keine Kommentare

Einleitung


Wer sich mit Od­oo‑Datenstrukturen beschäftigt hat, kennt das Problem: Man möchte Informationen aus einer verknüpften Akte sofort im Formular sehen, ohne jedes Mal ins verlinkte Dokument springen zu müssen. Genau dafür gibt es in Odoo das Related‑Feld — eine deklarative Lösung, um kontextuelle Werte direkt anzuzeigen.


Anstatt eine Python‑Berechnung zu schreiben, folgt ein Related‑Feld einfach einer Kette von Bezügen und zeigt den Wert am Ende dieser Kette an. Für Entwickler ist es ein zeitsparendes Werkzeug; auch Berater in Odoo Studio können es nutzen, um ohne Code zusätzliche Kontextangaben in Formulare einzubauen.


Dieses Kapitel erklärt, welche Daten ein Related‑Feld ausliest, wie Odoo damit intern umgeht, wie Sie es in Studio oder per Python anlegen und wo es sich in typischen Geschäftsprozessen sinnvoll einfügt.

Was ist das Related-Feld in Odoo


Im Odoo‑ORM ist das Related‑Feld kein völlig neues Feldformat wie Float oder Char, sondern eher eine Abkürzung: Es legt ein Feld aus einem anderen Modell offen, indem es einer Folge von relationalen Feldern folgt. Der Datentyp des Related‑Feldes entspricht dem Typ desjenigen Feldes, auf das zuletzt verwiesen wird.


Ein einfaches Szenario: Die Verkaufsbestellung hat ein partner_id‑Feld (Many2one zu res.partner). Definiert man ein Related‑Feld mit related='partner_id.country_id', erscheint das Land des Kunden direkt auf der Bestellung – ohne dass die Information kopiert gespeichert werden muss.

Für Anwender verhält sich ein Related‑Feld wie jedes andere Feld im Formular: Zeigt die Zielspalte einen Text, sieht man ein Texteingabefeld; ist es ein Many2one, bekommt man eine Auswahlliste; ist es Boolean, erscheint ein Kontrollkästchen. Das Related‑Feld übernimmt die Oberfläche des Zielfeldes.


Per Voreinstellung sind Related‑Felder schreibgeschützt und werden nicht in der Datenbank gespeichert. Sie zeigen stets den aktuellen Wert des Quell‑Datensatzes an, können aber nicht in Domain‑Filtern oder Suchen genutzt werden, solange man nicht store=True setzt.


In Odoo Studio lassen sich Related‑Felder beim Hinzufügen eines neuen Feldes auswählen. Man klickt sich durch die vorhandenen Beziehungen und Studio legt das Feld mit der passenden Konfiguration an – ideal für Berater, die Formulare erweitern wollen, ohne Python zu schreiben.

Wie das Feld funktioniert


Beim Lesen folgt Odoo der Punktnotation im related‑Attribut. Jeder Zwischenschritt (außer dem letzten) muss eine relationale Verbindung sein – Many2one, One2many oder Many2many – während das letzte Element jeden Datentyp haben kann.


Nachfolgend ein klares Beispiel, wie ein Related‑Feld in einem Python‑Modul definiert wird:


from odoo import fields, models

class SaleOrder(models.Model):
    _inherit = 'sale.order'

    partner_country_id = fields.Many2one(
        related='partner_id.country_id',
        string='Kundenland',
        store=True,
    )

In diesem Beispiel springt Odoo von partner_id zum res.partner‑Datensatz und liest dort country_id aus. Das Ergebnis ist auf der Verkaufbestellung als Many2one‑Feld verfügbar, das das Land des Kunden abbildet.


Gespeichert vs. nicht gespeichert

Das wichtigste Unterscheidungsmerkmal: Standardmäßig gilt store=False. Das heißt, der Wert wird bei jedem Zugriff dynamisch ermittelt und befindet sich nicht in der Datenbanktabelle des Modells.


Mit store=True schreibt Odoo den Wert in eine Datenbankspalte, sobald sich die Quelle ändert. Das macht Filtern, Gruppieren und Suchen auf dem Related‑Feld möglich – entscheidend für Listen, Pivot‑Auswertungen und Berichte.


Der Nachteil: gespeicherte Related‑Felder brauchen Speicherplatz und verursachen Schreibaufwand bei Aktualisierungen der Quelldaten. Odoo verwaltet das über seine Abhängigkeitsverfolgung automatisch, dennoch sollten Sie die Performance‑Folgen bei großen Datenmengen bedenken.


Schreibgeschützt vs. beschreibbar

Standardmäßig sind Related‑Felder read‑only. Setzen Sie readonly=False, wird das Feld editierbar — und Odoo schreibt Änderungen durch die Beziehungs‑Kette zurück auf das Quellobjekt. Das bedeutet: Wird etwa ein Related‑Feld partner_id.phone auf einer Bestellung geändert, aktualisiert man tatsächlich den Partnerdatensatz.


Beschreibbare Related‑Felder sind mächtig, aber können überraschen. Verwenden Sie sie nur, wenn das Zurückschreiben auf das Quellmodell beabsichtigt ist — z. B. für schnelle Listenbearbeitungen — ansonsten riskieren Sie unbeabsichtigte Änderungen an geteilten Stammdaten.


Wichtige Feldparameter

Wesentliche Einstellungen, die Sie bei Related‑Feldern kennen sollten:

  • related: Die Punktkette der Feldnamen (z. B. 'partner_id.country_id'). Dieses Attribut ist zwingend.
  • store: Auf True setzen, wenn das Feld persistiert werden und in Filtern/Gruppierungen genutzt werden soll.
  • readonly: Auf False setzen, wenn Nutzer das Feld ändern dürfen sollen (Schreibdurchgriff auf die Quelle).
  • string: Beschriftung, die im UI angezeigt wird. Standardmäßig übernimmt Odoo die Bezeichnung des Zielfelds.
  • depends: Meist nicht nötig, weil Odoo die Abhängigkeiten aus der related‑Kette ableitet; nur in Sonderfällen explizit verwenden.

Zusammenspiel mit dem Odoo‑ORM

Beim Lesen liefert das Related‑Feld den Wert des letzten Feldes in der Kette. Fehlt ein Zwischenelement (z. B. partner_id ist leer), dann liefert das Related‑Feld False — das ist normales Verhalten im Odoo‑ORM.


Stored Related‑Felder lassen sich in Domains, Views und Reports uneingeschränkt verwenden. Unstored‑Felder kann man zwar in Formularen und Listen anzeigen, aber für serverseitige SQL‑Filterung sind sie ohne store=True nicht verfügbar.

Praktische Einsatzszenarien im Business


Related‑Felder finden in vielen Anwendungsbereichen Verwendung. Nachfolgend fünf alltägliche Beispiele aus der Praxis.


CRM & Vertrieb: Kundentelefon auf Verkaufsaufträgen

Vertriebsmitarbeiter wollen häufig die Telefonnummer des Kunden direkt auf der Bestellung sehen. Ein Related‑Feld related='partner_id.phone' auf sale.order löst das: Die Nummer erscheint kontextbezogen, Anrufe sind schneller möglich — und das Ganze erfordert kaum Entwicklungsaufwand. In Studio ist diese Anpassung in Sekunden gemacht.


Buchhaltung: Währung der Firma in Rechnungszeilen

In Multi‑Company‑Setups ist es sinnvoll, die Firmenwährung auf Rechnungszeilen sichtbar zu machen. Ein Feld wie related='move_id.company_id.currency_id' springt über zwei Many2one‑Beziehungen zur Währung. Solche Ketten sind möglich, sollten aber kurz gehalten werden; mit store=True lassen sich Berichte nach Firmenwährung filtern.


Lager: Produktkategorie auf Bewegungszeilen

Lagerteams benötigen oft die Produktkategorie auf stock.move.line, ohne jedes Produkt zu öffnen. Ein Related‑Feld zu product_id.categ_id zeigt die Kategorie direkt an. Gespeichert erlaubt es, Bestandsbewegungen nach Kategorie zu gruppieren — praktisch bei vielen Produktfamilien.


Produktion: Interne Artikelnummer auf Arbeitsaufträgen

Auf der Fertigungslinie hilft das Anzeigen der internen Artikelnummer dabei, Verwechslungen zu vermeiden. Ein Related‑Feld wie product_id.default_code auf mrp.workorder‑Zeilen stellt die Referenz genau dort bereit, wo der Bediener sie braucht, und reduziert Fehlentnahmen.


Zeiterfassung & Projekte: Abteilung des Mitarbeiters

Projektleiter möchten bei Stundeneinträgen oft die Abteilung des Mitarbeiters sehen, z. B. für Kostenstellen‑Analysen. Ein Related‑Feld related='employee_id.department_id' auf account.analytic.line zeigt die Abteilung an und mit store=True lassen sich Zeiten nach Abteilung filtern.

Related-Feld anlegen oder anpassen


Es gibt drei gängige Wege, ein Related‑Feld zu erstellen — je nach technischem Kontext und Deployment‑Strategie.


Mit Odoo Studio (kein Code)

Studio ermöglicht das Anlegen von Related‑Feldern ohne Python‑Code. So geht’s in Stichpunkten:

  1. Studio aus dem Hauptmenü öffnen.
  2. Zum Formular navigieren, das erweitert werden soll.
  3. Auf "Feld hinzufügen" klicken und "Related Field" wählen.
  4. Die relationale Pfadfolge Schritt für Schritt auswählen.
  5. Feldbeschriftung vergeben und festlegen, ob gespeichert oder schreibgeschützt.
  6. Studio speichern und schließen.

Studio legt das Feld mit einem x_studio‑Prefix an und fügt es in die Ansicht ein. Für schnelle UI‑Erweiterungen ohne Datenbankmigration ist das die effizienteste Methode.


Per Python in einem Custom‑Modul

Für Entwickelnde ist das Definieren im Modell die empfohlene Vorgehensweise, da sie Versionskontrolle und sauberes Deployment über Umgebungen erlaubt:


from odoo import fields, models

class StockMoveLine(models.Model):
    _inherit = 'stock.move.line'

    product_category_id = fields.Many2one(
        related='product_id.categ_id',
        string='Produktkategorie',
        store=True,
    )

Nach der Definition fügen Sie das Feld in die passende View‑XML ein. Odoo legt die Datenbankspalte bei Modulinstallation oder ‑upgrade automatisch an — das ist das übliche Muster für wartbare Anpassungen.


Über die XML‑RPC API

Wenn Felder programmatisch erstellt werden, etwa in einem Automatisierungs‑Script, können Related‑Felder auch per XML‑RPC angelegt werden, indem man das related‑Attribut in der Felddefinition setzt:

field_id = models.execute_kw(
    ODOO_DB, uid, ODOO_API_KEY,
    'ir.model.fields', 'create',
    [{
        'name': 'x_partner_country_id',
        'field_description': 'Kundenland',
        'model_id': sale_order_model_id,
        'ttype': 'many2one',
        'relation': 'res.country',
        'related': 'partner_id.country_id',
        'store': True,
        'readonly': True,
        'state': 'manual',
    }]
)

Beim API‑Erstellen müssen ttype und relation manuell angegeben werden, weil die API die Typinformation nicht automatisch aus der Kette ableitet. Diese Methode eignet sich für ferngesteuerte Deployments und automatisierte Konfigurationen.

Empfohlene Vorgehensweisen


1. Speichern Sie das Feld, wenn Filtern oder Gruppieren nötig ist

Benötigen Anwender Filter oder Gruppierungen auf dem Related‑Feld, setzen Sie store=True. Andernfalls müsste Odoo alle Datensätze in Python laden, was bei großen Datenmengen nicht skaliert. Für rein anzeigebasierte Felder im Formular reicht unstored.


2. Halten Sie die Kette möglichst kurz

Zwei Ebenen wie partner_id.country_id sind performant und wartbar. Sehr lange Ketten erhöhen Fehlerquellen und machen Debugging schwerer. Bei tief verschachtelten Abhängigkeiten ist ein berechnetes Feld mit Python‑Logik oft die bessere Wahl.


3. Wissen, was readonly=False bedeutet

Ein editierbares Related‑Feld schreibt nicht lokal, sondern verändert die Quelle. Wenn Sie partner_id.phone auf einer Bestellung editierbar machen, ändern Sie den eigentlichen Partnerdatensatz. Das wirkt sich auf alle Dokumente mit diesem Partner aus — stellen Sie sicher, dass das beabsichtigt ist.


4. Related‑Felder für Anzeige, nicht zur Datenduplizierung verwenden

Related‑Felder sollen vorhandene Daten kontextbezogen sichtbar machen, nicht unabhängig duplizieren. Wenn eine separate Kopie nötig ist, die sich vom Ursprung unterscheiden darf, nutzen Sie ein normales Feld mit Standardwerten oder automatisierten Aktionen statt eines Related‑Feldes mit store=True und readonly=False.


5. Zugriffsrechte prüfen

Ein Related‑Feld liest über mehrere Modelle hinweg. Haben Nutzer keine Leserechte auf ein Zwischermodell, wird das Feld leer zurückgegeben — korrekt aus Sicht der Sicherheit, aber verwirrend für Anwender. Prüfen Sie daher die Zugriffsrechte aller Modelle in der Kette.

Häufige Stolperfallen


Filtern auf ein unstored Related‑Feld

Das passiert häufig: Ein Feld wird in einer Listenansicht gezeigt, und man versucht, eine Suche oder einen Filter darauf anzulegen. Ohne store=True sind solche Filter auf Datenbankebene nicht möglich; die Domain liefert entweder einen Fehler oder keine Ergebnisse. Fügen Sie store=True hinzu, wenn das Feld als Filter dienen soll.


Ungewolltes Zurückschreiben auf die Quelle

Ein häufiger Fehler ist, ein Related‑Feld in Studio editierbar zu machen und danach überrascht zu sein, dass die Quelle geändert wurde. Klären Sie vorab mit den Fachbereichen, ob Änderungen tatsächlich auf das Quellmodell zurückgeschrieben werden dürfen.


Nichtbeachtung leerer Zwischenfelder

Ist ein Feld in der Kette leer, ergibt das Related‑Feld False und wird im UI leer angezeigt. In Python‑Methoden müssen Sie diesen Fall abfangen, sonst drohen TypeErrors. Testen Sie auch mit unvollständigen Datensätzen, nicht nur mit sauberen Beispielen.


Related statt berechnetes Feld verwenden

Related‑Felder sind ideal, wenn Sie ein einzelnes Feld transparent durchreichen möchten. Sobald Logik, Transformationen oder Bedingungen nötig werden, ist ein computed‑Feld mit Python‑Code die robustere Lösung. Workarounds mit langen Related‑Ketten sind schwer wartbar und fehleranfällig.


Performance‑Probleme bei vielen gespeicherten Related‑Feldern

Jedes gespeicherte Related‑Feld erzeugt Updates, wenn die Quelle sich ändert. Bei vielen Feldern auf großen Tabellen kann das zu erheblichem Schreibaufkommen führen. Bei großem Datenvolumen sollten Sie die Performance messen und gegebenenfalls auf unstored‑Anzeigefelder setzen, wenn Echtzeit‑Aktualität nicht nötig ist.

Fazit


Das Related‑Feld ist ein ausgesprochen praktisches Werkzeug in Odoo, wenn Sie kontextuelle Informationen anzeigen wollen, ohne Daten zu duplizieren. Es erlaubt das Auslesen über Relationketten, die Anzeige verknüpfter Werte in jedem View und optionales Persistieren für Reportingzwecke.


Wer weiß, wann store=True Sinn macht, wann readonly=False verwendet werden darf und wie man leere Zwischenglieder behandelt, vermeidet viele typische Probleme in Odoo‑Projekten. Ob Entwickler, Berater in Studio oder technische Leitung — Related‑Felder gehören ins Standardrepertoire.

Beim Aufbau oder der Erweiterung eines Odoo‑Datenmodells sollten Related‑Felder zusammen mit computed‑Feldern, Many2one‑Beziehungen und den weiteren Feldtypen geplant und eingesetzt werden.

Bei Dasolo unterstützen wir Unternehmen dabei, Odoo in Vertrieb, Betrieb, Buchhaltung und weiteren Bereichen effizient einzusetzen, zu konfigurieren und zu optimieren. Wenn Sie Hilfe beim Datenmodell, beim Anlegen von Feldern oder bei nachhaltigen, wartbaren Anpassungen brauchen, begleiten wir Sie gerne. Kontaktieren Sie uns und lassen Sie uns besprechen, wie wir Ihr Odoo‑Projekt unterstützen können.

Related Field in Odoo: Der umfassende Leitfaden
Dasolo 6. März 2026
Diesen Beitrag teilen
Anmelden , um einen Kommentar zu hinterlassen