Zum Inhalt springen

Domain Fields in Odoo: Der vollständige Guide für Anwender

Lerne, wie der Feldtyp „Domain“ in Odoo funktioniert: wo er im System auftaucht und wie du ihn sinnvoll in deinem Datenmodell und bei individuellen Anpassungen einsetzt. Ich erkläre dir, welche Rolle Domains beim Filtern von Datensätzen spielen, wo du sie im Form- und Suchbereich findest und wie du mit korrekten Domain-Ausdrücken Beziehungen, Zugriffsregeln und Standardwerte steuerst. Außerdem zeige ich Praxisbeispiele für typische Anwendungsfälle — etwa relationale Filter, dynamische Standard-Domains und Domains in XML-Views — damit du Fehler vermeidest und deine Module sauber und performant gestaltest.
6. März 2026 durch
Domain Fields in Odoo: Der vollständige Guide für Anwender
Dasolo
| Noch keine Kommentare

Wenn Sie Odoo schon einmal konfiguriert haben, sind Ihnen sicher Filterbedingungen begegnet, die in eckigen Klammern stehen. Solche Ausdrücke tauchen in Aktionsbuttons, automatisierten Regeln, Zugriffsbeschränkungen und E-Mail-Vorlagen auf. Weniger bekannt ist, dass Odoo dafür auch einen speziellen Feldtyp im ORM anbietet: das Domain-Feld, das Filterlogik als strukturierte Daten speichern und im UI als bedienbarer Filter-Builder darstellen kann.


Ob Sie Entwickler sind, der Module baut, oder Key-User, der Workflows ohne Coding anpasst: Zu wissen, was ein Domain-Feld tatsächlich speichert und wie man es sicher einsetzt, spart später viel Aufwand. Diese Übersicht erklärt Zweck, Einsatzszenarien, technische Details und typische Stolperfallen.

Was ist das Domain-Feld in Odoo


In Odoo bezeichnet ein Domain eine Liste von Bedingungen, mit denen Datensätze gefiltert werden. Sie hat eine eigene Syntax aus Tupeln und logischen Operatoren und wird bei einer Suche in eine SQL WHERE-Bedingung überführt.

Beispiel einer Domain


[('customer_rank', '>', 0), ('active', '=', True)]

Diese Regel bedeutet: Liefere alle Datensätze, bei denen customer_rank größer als 0 ist UND active auf True steht.


Der Feldtyp Domain (fields.Domain) ist ein spezielles Feld im Odoo-ORM, das solche Filterausdrücke als Daten speichert. Im Gegensatz zu einem einfachen Textfeld prüft es die Syntax, bietet Serialisierung und kann im Frontend über ein eigenes Widget visuell bearbeitet werden.


Darstellung im Interface

Im Interface nutzt ein Domain-Feld normalerweise den Domain-Editor: ein visueller Regel-Builder, in dem Nutzer ein Feld auswählen, Operatoren wie =, enthält oder > auswählen und Werte eingeben können. Genau dasselbe Werkzeug begegnet Ihnen beim Einrichten von Zugriffskontrollen oder automatisierten Aktionen.


In der Datenbank werden Domain-Werte als Text abgelegt — die stringrepräsentation einer Python-Liste. Das Feld kümmert sich um Serialisierung und Validierung, sodass Entwickler in Python mit gültigen Domain-Strings arbeiten können, während die Persistenzschicht das Speichern übernimmt.

Das zeigt einen Grundgedanken des Odoo-Datenmodells: Felder sind mehr als nur Speicherplätze. Sie verkapseln auch Bedeutung, UI-Verhalten und Validierungslogik in einer einzigen Definition.

Wie das Feld funktioniert


Wie Domain-Felder im Hintergrund mit dem ORM zusammenarbeiten


Speicherung und Darstellung

Wird eine Domain gespeichert, legt Odoo sie als serialisierten String ab. Variablen wie uid werden zur Laufzeit aufgelöst, sodass Filter dynamisch bleiben — etwa wenn eine Regel nur für den aktuell eingeloggten Benutzer gelten soll.

Beim Ausführen von Suchanfragen wertet das ORM den gespeicherten String kontrolliert aus (mittels safe_eval) und übersetzt die Bedingung in eine entsprechende SQL WHERE-Klausel. safe_eval erlaubt dabei nur einen sicheren, eingeschränkten Ausdrucksraum und kennt Odoo-spezifische Kontextfunktionen.


Das Domain-Widget

Standardmäßig verwenden Felder vom Typ fields.Domain das Domain-Widget. Nutzer können dort Bedingungen hinzufügen, mit UND/ODER verknüpfen und Ergebnisse direkt prüfen — ohne Code schreiben zu müssen.

Gerade dieses Widget macht Domain-Felder für Fachanwender zugänglich: Die visuelle Oberfläche übernimmt die eigentliche Syntaxarbeit und reduziert Fehler bei der Konfiguration.


Modellkontext

Ein Domain-Feld kann an ein Modell gebunden werden, damit der Builder weiß, welche Feldnamen und Datentypen angeboten werden. Dies geschieht über das Attribut model_field im Feld. Fehlt dieser Kontext, fällt das Widget auf ein einfaches Textfeld zurück, was die Bedienbarkeit deutlich verschlechtert.


Die Kontextbindung zeigt, wie Odoo Felddefinitionen mit dem UI verknüpft: Das Feld weiß, auf welches Modell es filtert, und die Oberfläche passt sich entsprechend an.


Zusammenspiel mit anderen Datensätzen

Domain-Felder werden oft zusammen mit relationalen Feldern eingesetzt — etwa um die Einträge in einem Many2one-Dropdown einzuschränken, um Zielmengen für Automatisierungen zu definieren oder um Scope von Reports festzulegen. Weil der Filter auf ORM-Ebene greift, respektiert er zugleich Odoos Sicherheits- und Zugriffsregeln.

Praxisbeispiele aus dem Business-Alltag


Domain-Felder begegnen Ihnen in fast jedem Odoo-Modul. Folgende Beispiele zeigen typische Business-Anwendungen.


1. Automatisierte Aktionen und E-Mail-Auslöser

Beim Anlegen einer automatisierten Aktion definieren Sie eine Domain, die festlegt, welche Datensätze die Aktion auslösen. Ein Mahn-E-Mail-Workflow könnte z. B. nur auf gebuchte, unbezahlte Rechnungen nach Fälligkeitsdatum abzielen. Diese Domain liegt auf dem Modell base.automation in einem Domain-Feld namens filter_domain und bestimmt, für welche Datensätze die Aktion ausgeführt wird.


2. Record rules und Zugriffskontrolle

Record-Rules verwenden Domain-Felder, um zu beschreiben, welche Datensätze eine Benutzergruppe sehen oder bearbeiten darf. Beispielsweise kann eine Regel Sichtbarkeit auf Datensätze des aktuellen Verkaufsteams einschränken — ausgewertet zur Laufzeit. So entsteht eine Zeilenebenen-Sicherheit ohne eigenen Code; jede Record-Rule speichert ihre Bedingung als Domain.


3. Filter in Lager und Logistik

Im Lagerwesen nutzen geplante Aufgaben und Nachbestellregeln Domains, um bestimmte Produktkategorien, Lagerorte oder Bestandsniveaus anzusprechen. Eine automatische Nachbestellung lässt sich z. B. auf lagerfähige Produkte mit Bestand unter dem Nachbestellpunkt begrenzen und spart so unnötige Verarbeitung großer Datenmengen.


4. CRM-Pipeline und Lead-Qualifizierung

In CRM steuern Domains die Automatisierung von Pipeline-Stufen, Aktivitäten und Lead-Zuordnung. Mit Domains lassen sich Leads nach Land, Branche oder Umsatzgröße dem richtigen Vertriebsmitarbeiter zuordnen. Das macht Regeln über die Oberfläche flexibel konfigurierbar, statt für jede Änderung in den Code eingreifen zu müssen.


5. Dynamische Many2one-Auswahllisten

Auf Formularen begrenzt eine Domain auf einem Many2one-Feld die sichtbaren Optionen. Ein Lieferantenfeld, das nur aktive Lieferanten mit Lieferanten-Rang > 0 zeigt, reduziert Fehleingaben. Domains können sich dabei dynamisch auf andere Felder des Formulars beziehen und so die Auswahl in Echtzeit anpassen.

Anlegen und Anpassen des Felds


Zwei Wege, Domain-Felder einzusetzen: No-Code per Odoo Studio oder technische Anpassung per Modul.


Arbeiten mit Odoo Studio

Odoo Studio bietet aktuell kein eigenes Interface-Element, um direkt ein Domain-Feld zu erzeugen. Meistens ist das aber nicht nötig: Die eingebauten Domain-Editoren in Automatisierungen, Record-Rules und Serveraktionen reichen in vielen Fällen aus.

Wollen Sie auf einem Formular eine Domain für ein Many2one-Feld setzen, geht das in Studio über die Eigenschaften des Feldes: Dort können Sie eine Domain eintragen; Studio prüft die Syntax und speichert die Regel in der View-Definition.


Technische Anpassung in Python

In einem eigenen Modul ist das Hinzufügen eines Domain-Felds ein normaler Schritt in der Modell-Definition. Das Entwicklerhandbuch beschreibt das Vorgehen, hier ein einfaches Beispiel mit dem ORM:

from odoo import models, fields

class MyModel(models.Model):
    _name = 'my.model'

    model_name = fields.Char(default='res.partner')
    filter_domain = fields.Domain(
        string='Filter Domain',
        model_field='model_name',
        help='Domain expression to filter partner records'
    )

Das Attribut model_field verbindet den Domain-Editor mit dem Feld, das den Modellnamen enthält. So weiß das Widget, welche Felder es zur Auswahl anbietet; außerdem ermöglicht die Trennung von Modellname und Domain dynamische Einsatzszenarien.


Widget in der Formularansicht anzeigen

Um den visuellen Builder im Formular zu zeigen, referenzieren Sie sowohl das Modell-Feld als auch das Domain-Feld in der XML-View:


<field name="model_name" invisible="1"/>
<field name="filter_domain" widget="domain"
       options="{'model': 'model_name'}"/>

Fehlt die Angabe widget="domain" oder die Model-Option, rendert Odoo das Feld als normalen Text. Immer beides angeben, wenn Nutzer Domains per UI pflegen sollen.


Domain per XML-RPC schreiben

Wenn Sie Domain-Werte über die API setzen, müssen Sie die Domain als string übergeben, nicht als Python-Liste.

models.execute_kw(db, uid, api_key, 'my.model', 'write',
    [[record_id], {
        'filter_domain': "[('active', '=', True)]"
    }]
)

Eine häufige Fehlerquelle ist, eine echte Python-Liste statt des serialisierten Strings zu übergeben — das führt zu Type-Fehlern oder stillen Fehlschlägen, je nach Odoo-Version. Seriell übergeben, klappt es zuverlässig.

Empfohlene Vorgehensweisen


Diese praktischen Gewohnheiten sparen Zeit und verhindern Ärger beim Umgang mit Domain-Feldern.


Validieren Sie Domains vor dem Deployment

Ungültige Domains werfen Fehler beim Auswerten. Testen Sie deshalb neue Domains im Suchfeld oder im Entwicklermodus, bevor Sie sie in Automatisierungen oder Record-Rules speichern. Ein schneller search_count-Aufruf über die API ist ein guter Test, ob die Domain die erwartete Trefferzahl zurückgibt.


Nutzen Sie dynamische Variablen

Vermeiden Sie harte Kodierung von Benutzer- oder Firmen-IDs und festen Datumswerten in Domains. Variablen wie uid, context_today() oder current_company_id machen Domains portabel und robust gegenüber Datenbankwechseln.


Binden Sie immer den Modellkontext

Wenn Sie ein Domain-Feld in ein eigenes Modell aufnehmen, setzen Sie model_field und fügen Sie es in die View ein. Ohne Modellkontext sehen Anwender nur ein Textfeld – das erschwert die Nutzung und erhöht Fehlerrisiken.


Halten Sie Domains lesbar

Verschachtelte Domains mit vielen OR- und AND-Operatoren werden schnell unübersichtlich. Kommentieren Sie komplexe Filter in Ihrem Python-Code oder überlegen Sie, ob eine Serveraktion oder ein berechnetes Feld lesbarer und leichter testbar wäre.


Für programmgesteuerte Auswertung safe_eval nutzen

Wenn Sie Domain-Strings in Ihrem Code auswerten — z. B. in Serveraktionen — verwenden Sie stets Odoos safe_eval statt Pythons eval. safe_eval ist sicherer, unterstützt Odoo-spezifische Variablen und entspricht der internen Auswertung.


Mit realistischen Daten testen

Prüfen Sie Domains gegen echte Datenbestände, bevor Sie sie produktiv schalten. Besonders bei Automatisierungen und Record-Rules kann ein falscher Filter sonst falsche Datensätze verarbeiten oder unbemerkt Benutzerzugriffe verhindern.

Häufige Fehlerquellen


Die häufigsten Fehler beim Umgang mit Domain-Feldern und wie Sie sie vermeiden


Feldtyp mit Domain-Syntax verwechseln

„Domain“ wird in Odoo zweifach verwendet: als Syntax zur Filterbeschreibung und als Feldtyp fields.Domain, der diese Syntax speichert. Viele Einsteiger verwechseln beides. Ein Domain-Feld ist nur der Speicherort; der Inhalt ist die eigentliche Filterlogik.


Liste statt String via API übergeben

Beim Schreiben per XML-RPC müssen Domain-Felder als String übergeben werden. Eine rohe Python-Liste führt zu Fehlern oder stillen Ausfällen. Domain vorher serialisieren.


Modellkontext im Widget fehlt

Fügen Sie ein Domain-Feld nie ohne Model-Angabe in die View ein. Ohne diese Information gibt es nur ein Textfeld statt des hilfreichen visuellen Builders — das erhöht Fehleranfälligkeit und Nutzerfrustration.


IDs hart kodiert in Domains

Direktes Referenzieren von Datensatz-IDs macht Domains brüchig: Löschen oder Migration dieser Datensätze führt zu Problemen. Verwenden Sie stattdessen dynamische Variablen oder relationale Abfragen, damit die Filter portabel bleiben.


Zu großzügige oder zu restriktive Record-Rule-Domains

Eine zu offene Record-Rule kann vertrauliche Daten freigeben; eine zu enge kann Datensätze unsichtbar machen. Testen Sie Record-Rules immer aus Sicht der Zielgruppe, nicht als Administrator, der Regeln umgeht.


Archivierte Datensätze vergessen

Odoo schließt standardmäßig archivierte Datensätze (wo active = False) aus Suchergebnissen aus. Fehlt die Berücksichtigung archivierter Einträge, entstehen unerwartete Lücken. Ergänzen Sie ggf. ('active','in',[True,False]), wenn Archiviertes mit einbezogen werden soll.

Fazit


Domain-Felder sind ein zentrales Bauteil, das viele Odoo-Funktionen zusammenhält. Ob Zugriffskontrolle, Automatisierungen, dynamische Dropdowns oder Dashboard-Filter: Domain-Ausdrücke sind das Rückgrat der Datensatzfilterung, und fields.Domain bietet einen sauberen, validierten Mechanismus, diese Logik im Datenmodell abzulegen.


Für Anwender macht das Widget Filter konfigurierbar ohne Programmierkenntnisse. Für Entwickler ersetzt fields.Domain unstrukturierte Char-Felder mit Widget-Override und schafft klarere Modelldefinitionen. Egal ob Sie in Odoo Studio arbeiten, ein eigenes Modul schreiben oder Workflows im UI konfigurieren — wer Domain-Felder versteht, kann Odoo deutlich flexibler nutzen.


Die beschriebenen Konzepte gelten über Odoo-Versionen und Module hinweg. Zeit, die Sie in das Verständnis von Domain-Feldern investieren, zahlt sich aus — weil sie überall in Odoo vorkommen.


Brauchen Sie Unterstützung bei Ihrer Odoo-Implementierung?

Das Unternehmen Dasolo unterstützt Firmen dabei, Odoo zu implementieren, anzupassen und zu optimieren. Ob es um automatisierte Abläufe, maßgeschneiderte Module oder die bessere Nutzung Ihrer bestehenden Odoo-Installation geht: Unser Team bringt das technische Know-how, damit Sie sicher vorankommen.

Wenn Sie Fragen zu Domain-Feldern oder anderen Odoo-Themen haben, kontaktieren Sie unsund wir schauen uns gerne Ihre Konfiguration an und geben konkrete Handlungsempfehlungen.

Domain Fields in Odoo: Der vollständige Guide für Anwender
Dasolo 6. März 2026
Diesen Beitrag teilen
Anmelden , um einen Kommentar zu hinterlassen

Nächsten Beitrag lesen
Indexierte Felder in Odoo: Praktischer Leitfaden für Entwickler & Consultants
Indexe im Odoo-ORM: Warum sie wichtig sind, wann Sie sie setzen sollten und wie sie die Performance Ihrer Datenbank beeinflussen In Odoo sorgen Indexe dafür, dass Datenbankabfragen nicht jedes Mal die gesamte Tabelle durchsuchen müssen. Stattdessen legt die Datenbank eine strukturierte Referenz an — ähnlich einem Register im Buch — wodurch SELECT- und JOIN-Operationen deutlich schneller werden. In der Odoo-Modelldefinition steuern Sie dieses Verhalten über das Attribut index an Felddefinitionen; die ORM übersetzt das dann in die passende SQL-Anweisung beim Erstellen oder Aktualisieren der Tabelle. Wann macht ein Index Sinn? - Häufige Abfragen: Felder, die regelmäßig in WHERE-Klauseln oder als JOIN-Bedingungen auftauchen, profitieren am meisten. Beispiele sind Fremdschlüssel (Many2one), Statusfelder oder Identifikatoren. - Sortierung und Gruppierung: Wenn Sie oft ORDER BY oder GROUP BY auf einem Feld anwenden, kann ein Index die Operation beschleunigen. - Eindeutige Identifikation: Kombinationen aus mehreren Feldern, die in Abfragen immer gemeinsam verwendet werden, sind Kandidaten für zusammengesetzte Indizes. Wann nicht indexieren? - Kleine Tabellen: Bei wenigen Datensätzen bringt ein Index kaum Gewinn, erhöht aber Speicherbedarf und Wartungskosten. - Sehr häufig aktualisierte Felder: Jeder INSERT/UPDATE muss den Index aktualisieren, daher können Schreiblast und Latenz steigen — etwa bei Zählern oder Log-Feldern. - Felder mit hoher Kardinalität, die selten abgefragt werden: Nur wenn Abfragen darauf häufig vorkommen, lohnt sich ein Index. Auswirkungen auf Schreib- und Speicher-Performance Indexe beschleunigen Leseoperationen, verlangsamen aber Schreibvorgänge leicht, weil die Indexstrukturen bei jedem INSERT/UPDATE/DELETE gepflegt werden müssen. Außerdem beanspruchen sie zusätzlichen Festplattenspeicher und erhöhen die Komplexität bei Reorganisationen (VACUUM/REINDEX). Bei großen Tabellen sollten Sie daher sorgfältig abwägen: mehrere schreibintensive Indizes können die Gesamtdurchsatzrate deutlich reduzieren. Praktische Hinweise für Odoo-Entwickler - Standard: Many2one-Felder sollten üblicherweise index=True haben, weil sie oft für JOINs genutzt werden. - Selektiv indexieren: Setzen Sie index=True gezielt für Felder, die in Suchansichten, Filtern oder externen Abfragen verwendet werden. - Composite-Indizes: Für häufiger kombinierte Abfragen können zusammengesetzte Indizes sinnvoll sein; das definieren Sie auf Modellebene in _sql_constraints oder per Datenbankmigration. - Monitoring: Beobachten Sie langsame Abfragen mit Postgres EXPLAIN/ANALYZE und Odoo-Logging. Nur auf Basis realer Abfragepläne entscheiden, welche Indizes hinzugefügt oder entfernt werden. Kurz gesagt: Das index-Attribut ist ein einfaches, aber mächtiges Mittel, um Lesezugriffe in Odoo zu beschleunigen. Nutzen Sie es dort, wo Abfragen regelmäßig und kostspielig sind, und vermeiden Sie unnötige Indizes auf oft geänderten oder selten abgefragten Feldern — so behalten Sie sowohl Performance als auch Wartbarkeit Ihrer Datenbank im Griff.