Zum Inhalt springen

Auswahlfeld in Odoo: Der Ultimative Leitfaden

Alles, was Sie über das Auswahlfeld im Odoo-Datenmodell wissen müssen, von der grundlegenden Nutzung bis zur technischen Anpassung
6. März 2026 durch
Auswahlfeld in Odoo: Der Ultimative Leitfaden
Dasolo
| Noch keine Kommentare

Einführung


Jedes Mal, wenn ein Benutzer eine Lead-Priorität auswählt, eine Zahlungsmethode auswählt oder ein Produkt in Odoo als aktiv oder archiviert markiert, interagiert er höchstwahrscheinlich mit einem Auswahlfeld. Es ist einer der praktischsten Feldtypen im Odoo-Framework und einer der wichtigsten, um saubere, zuverlässige Datenmodelle zu erstellen.


Im Gegensatz zu einem Freitextfeld, in das Benutzer alles eingeben können, beschränkt das Auswahlfeld die Eingabe auf eine vordefinierte Liste von Auswahlmöglichkeiten. Diese Einschränkung ist der ganze Sinn. Sie hält Ihre Daten konsistent, macht das Filtern und Berichten genauer und verhindert die Art von Tippfehlern und Variationen, die im Laufe der Zeit stillschweigend Aggregationen und Dashboards brechen.


Dieser Leitfaden behandelt alles, von dem, was das Feld speichert und wie es in der Benutzeroberfläche erscheint, bis hin zum Erstellen und Anpassen über Odoo Studio, Python-Module oder die XML-RPC-API. Sie finden auch praktische Beispiele aus realen Geschäftsabläufen und eine Liste häufiger Fehler, die vermieden werden sollten.

Was ist das Auswahlfeld in Odoo


Im Odoo ORM speichert das Auswahlfeld einen String-Wert, der aus einer festen Liste von Optionen ausgewählt wird. Jede Option wird als Schlüssel-Wert-Paar definiert: Der Schlüssel ist das, was in der Datenbank gespeichert wird, und das Label ist das, was der Benutzer in der Benutzeroberfläche sieht.


Zum Beispiel könnte ein Prioritätsfeld mit den folgenden Optionen definiert werden:

priority = fields.Selection([
    ('0', 'Normal'),
    ('1', 'Niedrig'),
    ('2', 'Hoch'),
    ('3', 'Sehr Hoch'),
], string='Priorität', default='0')

In diesem Beispiel sind '0', '1', '2' und '3' die Schlüssel, die in der Datenbank gespeichert sind. Die Bezeichnungen Normal, Niedrig, Hoch und Sehr Hoch sind das, was die Benutzer auf dem Bildschirm sehen. Diese Trennung ist wichtig, wenn es darum geht, später Bezeichnungen zu ändern, ohne bestehende Datensätze zu brechen.


In der Benutzeroberfläche erscheint ein Auswahlfeld als Dropdown-Liste in Formularansichten. In Listenansichten wird die menschenlesbare Bezeichnung angezeigt. Bei Verwendung des badge-Widgets wird jede Option als farbiger Tag dargestellt, was den Wert in dichten Listenansichten sofort sichtbar macht.


Im Odoo Studio wird dieser Feldtyp als Auswahl-Feld bezeichnet. Wenn es über das Studio erstellt wird, erhält es ein x_studio_-Präfix. Wenn es über Code oder die XML-RPC-API erstellt wird, wählen Sie den technischen Namen.

Wie das Feld funktioniert


Im Odoo-Datenmodell werden Auswahlfelder in PostgreSQL als VARCHAR-Spalte gespeichert. Die Datenbank speichert nur den Schlüssel, niemals die Bezeichnung. Dies ist wichtig zu beachten, wenn Sie Domainfilter oder Serveraktionen schreiben, da Sie den Schlüssel und nicht den menschenlesbaren Wert verwenden müssen.


Zum Beispiel, um nach allen Leads mit hoher Priorität zu suchen, wäre Ihre Domain [('priority', '=', '2')], nicht [('priority', '=', 'Hoch')].

Schlüsseleigenschaften von Feldern

Hier sind die wichtigsten Eigenschaften eines Auswahlfeldes im Odoo-Framework:

  • selection: Die Liste von (key, label)-Tupeln, die die verfügbaren Optionen definieren. Dies kann auch ein Methodenname (String) sein, der eine Liste dynamisch zurückgibt.
  • default: Der Schlüssel der Option, die verwendet werden soll, wenn noch kein Wert festgelegt wurde. Wenn weggelassen, beginnt das Feld leer.
  • required: Zwingt den Benutzer, eine Option auszuwählen, bevor er speichert. In Kombination mit einem Standardwert ist dies ein gängiges Muster für Statusfelder.
  • selection_add: Wird in der Modulvererbung verwendet, um neue Optionen zu einem bestehenden Auswahlfeld hinzuzufügen, ohne die gesamte Liste neu zu definieren. Dies ist der richtige Ansatz, wenn ein natives Feld erweitert wird.
  • ondelete: Funktioniert zusammen mit selection_add, um zu definieren, was mit Datensätzen passiert, die eine gelöschte Option enthalten, wenn das Modul, das sie hinzugefügt hat, deinstalliert wird.

Statische vs. Dynamische Auswahllisten

Standardmäßig wird die Liste der Optionen statisch in der Felddeklaration definiert. Sie können jedoch auch einen Methodennamen als String an den selection-Parameter übergeben. Odoo ruft diese Methode zur Laufzeit auf, um die Liste zu erstellen, was es Ihnen ermöglicht, je nach aktuellem Benutzer, aktueller Firma oder jedem anderen Kontext unterschiedliche Optionen anzuzeigen.


contract_type = fields.Selection(
    selection='_get_contract_types',
    string='Vertragsart'
)

def _get_contract_types(self):
    if self.env.user.has_group('hr.group_hr_manager'):
        return [('permanent', 'Unbefristet'), ('fixed', 'Befristet'), ('interim', 'Interim')]
    return [('permanent', 'Unbefristet'), ('fixed', 'Befristet')]

Wie es in Ansichten erscheint

In einer Formularansicht wird ein Auswahlfeld als Standard-Dropdown angezeigt. Sie können auch das Attribut widget="badge" verwenden, um es als farbige Bezeichnung darzustellen, was gut in Listen- und Kanban-Ansichten für Statusfelder funktioniert. Das Attribut widget="radio" zeigt die Optionen als Inline-Radiobuttons an, was sich für Felder mit einer kleinen Anzahl von Auswahlmöglichkeiten eignet, bei denen Sie alle Optionen auf einmal sichtbar haben möchten.


Interaktion mit dem Odoo ORM

Das Lesen und Schreiben von Auswahlfeldern im Odoo ORM funktioniert unkompliziert. Sie weisen den Schlüssel direkt zu, und das Framework kümmert sich automatisch um die Anzeigezuordnung. Beim Lesen eines Datensatzes über die XML-RPC-API mit fields_get enthält das Attribut selection des Feldes die vollständige Liste der [key, label]-Paare, die Sie verwenden können, um Ihre eigene Anzeige-Logik in externen Tools zu erstellen.


Geschäftsanwendungsfälle


Das Auswahlfeld erscheint in nahezu jedem Modul einer standardmäßigen Odoo-Implementierung. Hier sind fünf konkrete Beispiele aus gängigen Geschäftsabläufen.


CRM: Lead-Priorität und Pipeline-Stufenart

Das Prioritätsfeld bei CRM-Leads ist ein natives Auswahlfeld mit vier Stufen: Normal, Niedrig, Hoch und Sehr Hoch. Vertriebsteams verwenden es, um ihre Aufmerksamkeit auf die vielversprechendsten Möglichkeiten zu konzentrieren. Es fließt direkt in die Farbkennzeichnung der Kanban-Ansicht ein und kann in automatisierten Aktionen verwendet werden, um Folgeaufgaben auszulösen, wenn ein Lead eskaliert wird. Die richtige Verteilung der Prioritäten zu erreichen, ist eine der ersten Datenqualitätsverbesserungen, die die meisten CRM-Teams nach dem Live-Gang vornehmen.


Verkäufe: Zahlungsbedingungen und Rechnungsrichtlinien

Das invoice_policy-Feld bei Produkten ist ein Auswahlfeld, das steuert, ob die Rechnungsstellung auf bestellten Mengen oder gelieferten Mengen basiert. Dieses einzelne Feld bestimmt den gesamten Abrechnungsfluss für ein Produkt. Ähnlich verwendet der Abrechnungsmodus bei Abonnementverträgen ein Auswahlfeld, um zwischen vorausbezahlten und nachbezahlten Abrechnungszyklen zu unterscheiden. Beide sind gute Beispiele für Auswahlfelder, die erhebliche Auswirkungen auf finanzielle Arbeitsabläufe haben.


Inventar: Produkt- und Chargenqualitätszustände

In Fertigungs- und Qualitätskontrollarbeitsabläufen werden Auswahlfelder verwendet, um den Zustand von Chargen, Seriennummern und Reparaturaufträgen zu verfolgen. Das Feld für den Zustand des Reparaturauftrags beispielsweise durchläuft Werte wie Entwurf, bestätigt, in Reparatur, bereit und erledigt. Jeder Übergang kann automatisierte E-Mails, Bestandsbewegungen oder Buchungseinträge auslösen. Das Auswahlfeld fungiert als Kontrollpunkt, um den gesamten Arbeitsablauf herum aufgebaut ist.


Buchhaltung: Zahlungsmethode und Journaltype

Das Journaltype-Feld in Odoo Buchhaltung ist ein Auswahlfeld, das zwischen Verkaufsjournalen, Einkaufsjournalen, Bargeldjournalen und Bankjournalen unterscheidet. Odoo verwendet diesen Wert, um die korrekte Buchungslogik anzuwenden, zu bestimmen, welche Konten verfügbar sind, und bestimmte Operationen auf die richtigen Journaltype zu beschränken. Dies ist ein gutes Beispiel für ein Auswahlfeld, das Geschäftsregeln steuert, anstatt nur einen Datensatz zu kennzeichnen.


HR: Beschäftigungsart und Vertragsstatus

HR-Teams verwenden Auswahlfelder, um Beschäftigungsarten, Vertragsstatus und Urlaubsantragszustände zu verfolgen. Der Vertragsstatus beispielsweise wechselt von neu zu offen zu abgelaufen oder storniert. Automatisierungen können den HR-Manager einen Monat vor Ablauf eines Vertrags benachrichtigen, Onboarding-Checklisten auslösen, wenn ein neuer Mitarbeiter beginnt, und die Lohnabrechnungsregeln basierend auf der Beschäftigungsart aktualisieren. Das Auswahlfeld hält den Zustand, der all diese Logik antreibt.

Erstellen oder Anpassen des Auswahlfelds


Es gibt drei Hauptwege, um ein Auswahlfeld zu einem Odoo-Modell hinzuzufügen, abhängig von Ihrer Einrichtung und ob Sie die Änderung versionskontrolliert oder programmgesteuert anwenden müssen.


Verwendung von Odoo Studio (Keine Programmierung)

Odoo Studio ist das integrierte Low-Code-Tool zum Hinzufügen von Feldern, ohne Python zu schreiben. Um ein Auswahlfeld über Studio hinzuzufügen:

  1. Öffnen Sie Odoo Studio aus dem Hauptmenü.
  2. Navigieren Sie zu dem Formular, in dem Sie das Feld hinzufügen möchten.
  3. Ziehen Sie ein Auswahl-Feld aus der Seitenleiste auf das Formular.
  4. Fügen Sie Ihre Optionen im Eigenschaftenbereich des Feldes hinzu, indem Sie ein Label für jede Auswahl eingeben.
  5. Optional können Sie einen Standardwert festlegen und das Feld als erforderlich markieren.
  6. Speichern und schließen Sie Studio.

Studio speichert jede Option mit einem automatisch generierten Schlüssel und dem von Ihnen bereitgestellten Label. Das Feld erhält ein x_studio_-Präfix und wird automatisch zur Formularansicht hinzugefügt. Dies ist der schnellste Ansatz, um während einer Geschäftsanalyse-Sitzung mit einem Kunden ein Auswahlfeld hinzuzufügen.


Verwendung von Python in einem benutzerdefinierten Modul

Für Entwickler, die Odoo-Module erstellen, werden Auswahlfelder in Python-Modell-Dateien definiert. Dies ist der empfohlene Ansatz für Anpassungen, die versionskontrolliert und in mehreren Umgebungen bereitgestellt werden müssen:

from odoo import fields, models

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

    x_delivery_slot = fields.Selection([
        ('morning', 'Morgen (8h - 12h)'),
        ('afternoon', 'Nachmittag (13h - 17h)'),
        ('evening', 'Abend (18h - 20h)'),
    ], string='Lieferzeitfenster', default='morning')

Nachdem Sie das Feld definiert haben, fügen Sie es der relevanten XML-Ansichtsdatei hinzu, damit es in der Benutzeroberfläche erscheint. Odoo kümmert sich um die Erstellung der Datenbankspalte, wenn Sie das Modul installieren oder aktualisieren.


Wenn Sie ein natives Feld mit neuen Optionen erweitern, verwenden Sie selection_add, anstatt das Feld neu zu definieren:

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

    state = fields.Selection(
        selection_add=[('custom_approval', 'Ausstehende Genehmigung')],
        ondelete={'custom_approval': 'set default'}
    )

Verwendung der XML-RPC API

Wenn Sie Odoo-Anpassungen programmgesteuert verwalten, beispielsweise als Teil einer Bereitstellungspipeline oder eines Remote-Konfigurationsnotizbuchs, können Sie Auswahlfelder über die XML-RPC API erstellen:

field_id = models.execute_kw(
    ODOO_DB, uid, ODOO_API_KEY,
    'ir.model.fields', 'create',
    [{
        'name': 'x_contract_category',
        'field_description': 'Vertragskategorie',
        'model_id': model_id,
        'ttype': 'selection',
        'selection': "[('standard', 'Standard'), ('premium', 'Premium'), ('custom', 'Benutzerdefiniert')]",
        'state': 'manual',
    }]
)

Beachten Sie, dass beim Erstellen eines Auswahlfeldes über die API der selection-Wert als String-Darstellung der Python-Liste übergeben wird. Der Wert state: manual teilt Odoo mit, dass dieses Feld manuell erstellt wurde, was die richtige Einstellung für Felder ist, die über Studio oder die API erstellt wurden. So handhabt Dasolo die Erstellung von Remote-Feldern für Kunden im Rahmen automatisierter Konfigurationsskripte.


Best Practices


1. Verwenden Sie aussagekräftige und stabile Schlüssel

Der Schlüssel ist das, was in der Datenbank gespeichert wird und in Domainfiltern, automatisierten Aktionen und serverseitiger Logik verwendet wird. Wählen Sie einen Schlüssel, der die Option klar beschreibt und den Sie später nicht ändern müssen. Kurze, kleingeschriebene Strings funktionieren gut: 'draft', 'confirmed', 'cancelled'. Vermeiden Sie numerische Schlüssel, es sei denn, die Reihenfolge ist wirklich wichtig, da sie Ihren Code schwerer lesbar und verständlich machen.


2. Halten Sie die Liste kurz und erschöpfend

Ein Auswahlfeld mit mehr als acht oder zehn Optionen ist normalerweise ein Zeichen dafür, dass das Feld zu viel versucht. Wenn die Liste weiter wächst, überlegen Sie, ob eine Many2one-Beziehung zu einem Konfigurationsmodell angemessener wäre. Das gibt den Benutzern die Möglichkeit, die Optionen selbst über die Benutzeroberfläche zu verwalten, ohne dass ein Entwickler den Code oder die Definition eines Datenbankfeldes aktualisieren muss.


3. Setzen Sie immer einen Standardwert für erforderliche Felder

Wenn ein Auswahlfeld erforderlich ist, setzen Sie auch einen sinnvollen Standardwert. Dies verhindert Validierungsfehler, wenn Datensätze programmgesteuert, über Importe oder über die API erstellt werden, wo der Benutzer nicht anwesend ist, um eine Auswahl zu treffen. Der Standard sollte den häufigsten oder am wenigsten festgelegten Zustand im Workflow darstellen.


4. Verwenden Sie selection_add, wenn Sie native Felder erweitern

Wenn Sie Optionen zu einem bestehenden Odoo-Feld in einem benutzerdefinierten Modul hinzufügen müssen, verwenden Sie selection_add, anstatt das gesamte Feld neu zu definieren. Dies ist sicherer und kompatibler mit anderen Modulen, die möglicherweise ebenfalls dasselbe Feld erweitern. Kombinieren Sie es immer mit dem ondelete-Parameter, um zu steuern, was passiert, wenn Ihr Modul deinstalliert wird.


5. Verwenden Sie das Badge-Widget für Sichtbarkeit in Listenansichten

In Listen- und Kanban-Ansichten wird das Standard-Rendering eines Auswahlfeldes nur als Text dargestellt. Das Hinzufügen des widget="badge"-Attributs im XML der Ansicht verwandelt jeden Wert in ein farbiges Etikett, was das Scannen des Feldes auf einen Blick erheblich erleichtert. Dies ist besonders nützlich für Statusfelder, bei denen Benutzer schnell Datensätze identifizieren müssen, die Aufmerksamkeit erfordern.


Häufige Fallstricke


Ändern eines Schlüssels bricht vorhandene Daten

Das Label einer Auswahloption kann jederzeit sicher geändert werden, da nur der Schlüssel in der Datenbank gespeichert wird. Der Schlüssel hingegen darf sich niemals ändern, sobald Datensätze mit diesem Wert existieren. Wenn Sie einen Schlüssel umbenennen, zeigen alle vorhandenen Datensätze mit dem alten Schlüssel einen leeren oder ungültigen Wert in der Benutzeroberfläche an, und alle Domänenfilter oder Automatisierungen, die den alten Schlüssel verwenden, hören stillschweigend auf zu funktionieren. Wenn ein Schlüssel tatsächlich geändert werden muss, müssen Sie zuerst ein Datenmigrationsskript ausführen, um alle vorhandenen Datensätze zu aktualisieren.


Das Entfernen einer Option hinterlässt verwaiste Datensätze

Wenn Sie eine Option aus der Liste entfernen, während Datensätze weiterhin diesen Schlüssel haben, zeigen diese Datensätze einen fehlenden oder defekten Wert an. Suchen Sie vor dem Entfernen einer Option nach Datensätzen, die sie noch verwenden, und aktualisieren Sie diese entweder auf einen gültigen Wert oder archivieren Sie sie. Dies ist ein häufiges Problem während Datenbereinigungsprojekten, wenn die Liste der Optionen ohne ausreichende Analyse im Voraus entworfen wurde.


Verwendung des Labels anstelle des Schlüssels in Domänenfiltern

Ein sehr häufiger Fehler, insbesondere bei weniger technischen Benutzern, die Automatisierungsregeln in der Odoo-Oberfläche schreiben, besteht darin, nach dem menschenlesbaren Label anstelle des gespeicherten Schlüssels zu filtern. Dies erzeugt eine Domäne, die null Ergebnisse zurückgibt, ohne einen Fehler auszulösen, was schwer zu diagnostizieren sein kann. Überprüfen Sie immer die Felddefinition, um zu bestätigen, welcher Schlüssel welchem Label entspricht, bevor Sie einen Filter schreiben.


Verwendung eines Auswahlfeldes, wo ein Many2one geeigneter ist

Wenn sich die Liste der Optionen häufig ändert, wenn Benutzer sie selbst ohne Entwicklerbeteiligung verwalten müssen oder wenn die Optionen zusätzliche Attribute wie eine Farbe, eine Reihenfolge oder ein verknüpftes Konto tragen, dann ist eine Many2one-Beziehung zu einem Konfigurationsmodell die bessere Wahl. Auswahlfelder sind ideal für stabile, von Entwicklern verwaltete Listen. Für alles, was dynamischer ist, ist Many2one langfristig wartungsfreundlicher.


Nichtbehandlung des leeren Wertes in der serverseitigen Logik

Ein Auswahlfeld, das nicht erforderlich ist, kann einen False-Wert halten, wenn keine Option ausgewählt wurde. Wenn Ihr Python-Code oder Ihre automatisierte Aktion den Feldwert mit einem String vergleicht, ohne zuerst auf False zu überprüfen, erhalten Sie unerwartetes Verhalten oder Fehler. Behandeln Sie immer den leeren Fall ausdrücklich in Serveraktionen und berechneten Feldern, die von einem Auswahlfeld abhängen.

Fazit


Das Auswahlfeld ist eines dieser Feldtypen, das einfach aussieht, aber wirklich tiefgründig ist, sobald man versteht, wie es im Hintergrund funktioniert. Den Unterschied zwischen einem Schlüssel und einem Label zu kennen, zu verstehen, wann man selection_add anstelle der Neudefinition eines Feldes verwenden sollte, und zu erkennen, wann ein Many2one besser geeignet wäre, sind die Arten von Unterscheidungen, die eine gut gestaltete Odoo-Implementierung von einer trennen, die ein Jahr später Probleme verursacht.


Egal, ob Sie einen Vertragstyp über Odoo Studio hinzufügen, ein Lieferfensterfeld in einem benutzerdefinierten Python-Modul definieren oder ein Qualitätsstatusfeld über die API erstellen, die in diesem Leitfaden beschriebenen Muster geben Ihnen das, was Sie benötigen, um die richtige Entscheidung für Ihren Anwendungsfall zu treffen.

Im Odoo-Datenmodell ist das Auswahlfeld eines der wichtigsten Werkzeuge zur Sicherstellung der Datenqualität an der Quelle. Gut eingesetzt, hält es Ihre Datensätze sauber, Ihre Berichte genau und Ihre Automatisierungen zuverlässig.

Bei Dasolo helfen wir Unternehmen, Odoo in allen Abteilungen zu implementieren, anzupassen und zu optimieren. Egal, ob Sie Hilfe bei der Gestaltung eines sauberen Datenmodells, dem Hinzufügen benutzerdefinierter Felder zu Ihren Workflows oder dem Erstellen eines vollständigen Odoo-Moduls von Grund auf benötigen, unser Team ist hier, um zu helfen. Kontaktieren Sie uns und lassen Sie uns über Ihr Odoo-Projekt sprechen.

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