Zum Inhalt springen

Standardwerte in Odoo-Feldern: Der Ultimative Leitfaden

So füllen Sie Felder automatisch in Odoo aus, von statischen Werten bis hin zu kontextabhängigen Standardwerten und dynamischen Berechnungen
6. März 2026 durch
Standardwerte in Odoo-Feldern: Der Ultimative Leitfaden
Dasolo
| Noch keine Kommentare

Einführung


Jedes Formular in Odoo hat Felder. Einige müssen jedes Mal manuell ausgefüllt werden. Aber viele Felder können einen sinnvollen Standardwert erhalten, sodass die Benutzer bereits mit etwas Nützlichem beginnen. Der Standardwertmechanismus in Odoo ist auf den ersten Blick einfach, hat jedoch mehrere Ebenen, die es wert sind, verstanden zu werden, insbesondere wenn Sie Formulare für Ihr Team konfigurieren oder anpassen.


Egal, ob Sie ein Geschäftsbenutzer sind, der ein Feld über Odoo Studio anpasst, oder ein Entwickler, der ein Odoo-Feld-Tutorial durchläuft, zu wissen, wie Standardwerte funktionieren, spart Zeit und verhindert die Art von stillen Konfigurationsfehlern, die später schwer zu diagnostizieren sind.


Dieser Leitfaden behandelt, was Standardwerte in Odoo sind, wie sie auf der ORM-Ebene funktionieren, wann statische gegenüber dynamischen Standardwerten verwendet werden sollten und wie man sie über Odoo Studio oder Python-Code konfiguriert.

Was ist der Standardwert in Odoo


Im Odoo ORM ist ein Standardwert das, was einem Feld zugewiesen wird, wenn ein neuer Datensatz erstellt wird, bevor der Benutzer etwas eingibt. Es ist keine Einschränkung. Der Benutzer kann es frei ändern. Es ist einfach ein Ausgangspunkt, der das Formular sofort nützlicher macht.


Der default-Parameter ist in nahezu jedem Feldtyp im Odoo-Framework verfügbar: Char, Integer, Float, Boolean, Date, Many2one, Selection und andere. Er kann ein einfacher Wert, eine Python-Lambda oder ein Methodenverweis sein. All dies zählt je nach Anwendungsfall als gültiger Standardmechanismus.


Im Odoo Studio erscheinen Standardwerte im Eigenschaftenbereich des Feldes als einfache Eingabe. Geschäftsanwender können einen statischen Standard festlegen, ohne Code schreiben zu müssen. Dies macht es zu einer der zugänglichsten Möglichkeiten, die Datenkonsistenz mithilfe von Odoo Studio-Feldern zu verbessern, ohne dass Entwickler involviert werden müssen.


Auf Datenbankebene werden Standardwerte nicht in der Feldspalte selbst gespeichert. Sie befinden sich entweder in der Python-Modelldefinition oder in ir.default-Datensätzen in der Datenbank, je nachdem, wie sie konfiguriert wurden. Wenn ein neuer Datensatz erstellt wird, liest Odoo diese Standardwerte und füllt das Formular vor dem Benutzer aus.

Wie der Standardwert funktioniert


Wenn ein Benutzer ein neues Formular in Odoo öffnet, ruft das Framework default_get() im Modell auf. Diese Methode sammelt alle Feldstandards und gibt ein Wörterbuch zurück, das Feldnamen ihren Standardwerten zuordnet. Das Formular füllt dann diese Felder aus, bevor der Benutzer etwas unternimmt.

Es gibt vier Haupttypen von Standardwerten in Odoo, die jeweils ein anderes Szenario abdecken.


Statische Standards

Ein fester Wert, der in der Felddefinition fest codiert oder über Studio festgelegt ist. Zum Beispiel, ein Boolean-Feld standardmäßig auf True zu setzen oder ein Auswahlfeld auf 'draft'. Dies sind die einfachsten Arten und decken die meisten alltäglichen Anwendungsfälle in einem Odoo-Datenmodell ab.


Dynamische Standards über Lambda oder Methode

Eine Python-Funktion oder Lambda, die zum Zeitpunkt der Datensatzcreation ausgeführt wird. Dies ermöglicht Standards, die von dem aktuellen Datum, dem angemeldeten Benutzer oder einem anderen verfügbaren Kontext abhängen. Zum Beispiel, den aktuellen Benutzer als standardmäßig verantwortliche Person festzulegen oder heute als Standard-Dokumentdatum zu verwenden.


So sehen statische und dynamische Standards in einer Python-Modelldefinition aus, die dem Standard-Odoo-Entwicklungsmuster folgt:


from odoo import fields, models

class CrmLead(models.Model):
    _inherit = 'crm.lead'

    # Statischer Standard
    x_priority_level = fields.Selection(
        [('low', 'Niedrig'), ('medium', 'Mittel'), ('high', 'Hoch')],
        string='Prioritätsstufe',
        default='medium',
    )

    # Dynamischer Standard: aktueller Benutzer
    x_assigned_by = fields.Many2one(
        'res.users',
        string='Zugewiesen von',
        default=lambda self: self.env.user,
    )

    # Dynamischer Standard: heutiges Datum
    x_expected_date = fields.Date(
        string='Erwartetes Abschlussdatum',
        default=lambda self: fields.Date.today(),
    )

Kontextbasierte Standards

Werte, die über den Aktionskontext mit der default_field_name-Konvention übergeben werden. Wenn Sie innerhalb eines verwandten Datensatzes auf Erstellen klicken, übergibt Odoo häufig Kontextwerte, die Standardwerte für relationale Felder werden. Zum Beispiel wird beim Öffnen einer neuen Aufgabe innerhalb eines Projekts automatisch das Projektfeld gesetzt. Dies ist Teil der Funktionsweise von Navigationsflüssen im Odoo-Framework und wird vollständig von Kontextschlüsseln gesteuert, die jeder Entwickler oder fortgeschrittene Benutzer konfigurieren kann.


Benutzerspezifische Standardwerte über ir.default

Odoo unterstützt auch benutzerspezifische Standardwerte über ir.default-Datensätze. Ein Administrator kann einen persönlichen Standard für ein bestimmtes Feld in einem bestimmten Modell konfigurieren. Wenn dieser Benutzer einen neuen Datensatz erstellt, hat sein persönlicher Standard Vorrang vor dem modellbezogenen Standard. Dies ist in Mehrbenutzerumgebungen nützlich, in denen verschiedene Teammitglieder unterschiedliche Arbeitspräferenzen haben, und es ist eine der weniger bekannten Funktionen des Odoo ORM.


Prioritätsreihenfolge

Wenn mehrere Standardquellen für dasselbe Feld existieren, löst Odoo sie in dieser Reihenfolge auf: benutzerspezifisches ir.default zuerst, dann unternehmensbezogenes ir.default, dann der im Python-Modell definierte Standard. Kontextbasierte Standardwerte, die zur Laufzeit übergeben werden, überschreiben ebenfalls die modellbezogenen Standards. Diese Reihenfolge zu kennen, hilft Ihnen zu verstehen, warum ein Feld möglicherweise nicht den Wert anzeigt, den Sie erwarten, wenn Sie ein neues Formular öffnen.

Geschäftsanwendungsfälle


Standardwerte erscheinen in praktisch jedem Modul einer Odoo-Implementierung. Hier sind fünf praktische Beispiele aus realen Geschäftsabläufen.


CRM: Standardverkäufer bei neuen Leads

Wenn ein Verkäufer einen neuen Lead oder eine neue Gelegenheit erstellt, wird das Verantwortungsfeld standardmäßig auf den aktuellen Benutzer gesetzt. Dies verhindert, dass jeder Lead unzugewiesen beginnt und eine manuelle Zuordnung erfordert. Der Standard wird mit lambda self: self.env.user in der Modelldefinition festgelegt. In der Praxis verbessert dieses kleine Detail die CRM-Akzeptanz, da die Benutzer sofort ihre eigenen Leads sehen, ohne einen zusätzlichen Schritt.


Verkauf: Standardzahlungsbedingungen bei Bestellungen

Wenn eine Verkaufsbestellung für einen Kunden erstellt wird, werden Felder wie Preisliste und Zahlungsbedingungen basierend auf der Konfiguration des Kundenpartners standardmäßig gesetzt. Ein Kunde, der mit Zahlungsbedingungen von Net 30 eingerichtet ist, hat diese Bedingungen bei jeder neuen Bestellung vorausgefüllt. Dies reduziert manuelle Auswahlfehler und stellt sicher, dass die mit jedem Kunden vereinbarten Bedingungen konsistent angewendet werden, selbst wenn verschiedene Verkäufer die Bestellungen erstellen.


Inventar: Standardstandorte bei Übertragungen

Beim Erstellen eines internen Transfers oder einer Bestandsanpassung werden die Felder für die Quell- und Zielstandorte standardmäßig auf die in den Lagereinstellungen konfigurierten Standorte gesetzt. Lagermitarbeiter, die immer im selben Bereich arbeiten, finden den richtigen Standort bereits ausgewählt, wenn sie einen neuen Transfer öffnen. Dies spart Klicks und reduziert das Risiko, unter Zeitdruck den falschen Standort auszuwählen.


Buchhaltung: Standardjournal für Buchungen

Wenn ein Benutzer eine neue Kundenrechnung oder eine Lieferantenrechnung erstellt, wählt Odoo standardmäßig das entsprechende Journal basierend auf dem Buchungstyp und der Unternehmenskonfiguration aus. Ein Buchhalter, der eine neue Lieferantenrechnung öffnet, muss das Einkaufsjournal nicht jedes Mal manuell auswählen. Der Standardwert wird dynamisch aus den Unternehmenseinstellungen abgeleitet, nicht aus einem fest codierten Wert, was bedeutet, dass er auch dann korrekt bleibt, wenn Journale später neu konfiguriert werden.


Projekt: Standardstatus für neue Aufgaben

Wenn eine neue Aufgabe innerhalb eines Projekts erstellt wird, beginnt sie im ersten Status der Kanban-Konfiguration dieses Projekts. Wenn die Aufgabe durch Klicken auf eine Schaltfläche in einem bestimmten Projekt-Datensatz erstellt wird, werden kontextbasierte Standardwerte auch automatisch mit dem Projekt und manchmal dem Zuständigen vorausgefüllt. Teams, die Odoo für das Projektmanagement nutzen, profitieren von diesen Standardwerten, da sie neue Aufgaben von Anfang an am richtigen Ort halten, ohne dass eine manuelle Einrichtung erforderlich ist.

Erstellen oder Anpassen von Standardwerten


Es gibt drei Hauptansätze zur Festlegung von Standardwerten in Odoo, die von einer No-Code-Klicklösung in Studio bis hin zu vollständiger Python-Kontrolle in einem benutzerdefinierten Modul reichen.


Verwendung von Odoo Studio (Kein Code)

Odoo Studio bietet eine visuelle Schnittstelle zur Festlegung von Standardwerten für jedes Feld in Ihren Formularen. Um einen Standardwert über Studio festzulegen:

  • Öffnen Sie die Studio-Oberfläche für das Formular, das Sie ändern möchten
  • Klicken Sie auf das Feld, das Sie konfigurieren möchten
  • Suchen Sie im Eigenschaftenbereich des Feldes auf der rechten Seite das Eingabefeld für den Standardwert
  • Geben Sie den Wert ein oder wählen Sie ihn aus, den Sie als Startstandard verwenden möchten
  • Speichern und verlassen Sie Studio

Studio speichert diese Konfiguration als ein ir.default-Datensatz in der Datenbank. Sie gilt unternehmensweit, es sei denn, ein Administrator gibt eine benutzerspezifische Einschränkung an. Dieser Ansatz funktioniert gut für statische Standardwerte bei Auswahl-, Booleschen, Zeichen- und Ganzzahlfeldern. Bei Many2one-Feldern lässt Studio Sie einen vorhandenen Datensatz aus einem Dropdown-Menü auswählen. Es ist eine der praktischsten Anwendungen von Feldern in Odoo, ohne Code schreiben zu müssen.

Eine Sache, die man beachten sollte: Das Ändern des Standards über Studio, nachdem Benutzer bereits Datensätze erstellt haben, aktualisiert diese vorhandenen Datensätze nicht. Der neue Standard gilt nur für nach der Änderung erstellte Datensätze.


Verwendung von Python in der technischen Anpassung

Für technische Odoo-Anpassungen werden die Standardwerte direkt in der Felddefinition innerhalb des Python-Modells festgelegt. Dies gibt vollständige Kontrolle über statische Werte, dynamische Lambdas und methodenbasierte Standards. Es ist der bevorzugte Ansatz in jedem Odoo-Entwicklungsszenario, in dem der Standard von Laufzeitinformationen wie dem aktuellen Benutzer, dem heutigen Datum oder der Unternehmenskonfiguration abhängt.


Hier ist ein Beispiel, das mehrere Arten von Standards zeigt, die Sie zu einem benutzerdefinierten Modul hinzufügen könnten:


from odoo import fields, models

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

    # Statischer Boolescher Standard
    x_requires_review = fields.Boolean(
        string='Requires Review',
        default=False,
    )

    # Statischer Auswahlstandard
    x_delivery_preference = fields.Selection(
        [('standard', 'Standard'), ('express', 'Express')],
        string='Delivery Preference',
        default='standard',
    )

    # Dynamischer Standard mit einer Methode
    def _default_note(self):
        return self.env['ir.config_parameter'].sudo().get_param(
            'sale.default_note', default=''
        )

    x_internal_note = fields.Text(
        string='Internal Note',
        default=_default_note,
    )

Dieses Muster folgt der Standard-Odoo-Python-Feldkonvention und funktioniert über alle Odoo-Feldtypen hinweg. Der methodenbasierte Standard ist besonders nützlich, wenn die Logik komplexer ist als ein einzelner Lambda-Ausdruck.


Verwendung von ir.default-Datensätzen programmgesteuert

Sie können auch ir.default-Datensätze über die Odoo XML-RPC-API oder innerhalb einer Modul-Datendatei erstellen oder aktualisieren. Dies ist nützlich, wenn Sie eine Standardkonfiguration als Teil der Installation eines benutzerdefinierten Moduls bereitstellen. Das ir.default-Modell akzeptiert einen Modellnamen, einen Feldnamen, einen Wert und optional ein Unternehmen oder einen Benutzer, um den Standard einzugrenzen.


Dieser Ansatz ist im täglichen Entwicklungsprozess weniger verbreitet, kommt jedoch vor, wenn installierbare Odoo-Module erstellt werden, die vernünftige Standards als Teil ihrer Einrichtungsroutine konfigurieren müssen.

Best Practices für Standardwerte in Odoo


Standards für erforderliche Felder festlegen

Wenn ein Feld obligatorisch ist, geben Sie ihm nach Möglichkeit einen sinnvollen Standardwert. Dies verringert Reibungsverluste und verhindert Speicherfehler, wenn Benutzer versuchen, einen neuen Datensatz einzureichen, ohne zu erkennen, dass ein Feld erforderlich ist. Die Kombination von required=True mit einem praktischen Standard ist ein gutes Muster im Odoo-Datenmodell.


Verwenden Sie Lambdas für Datumsstandards

Verkoden Sie niemals ein Datum als Standardwert. Verwenden Sie lambda self: fields.Date.today(), damit das Standarddatum immer das aktuelle Datum zum Zeitpunkt der Erstellung des Datensatzes ist. Ein fest codiertes Datum wäre für jeden nach dem Schreiben des Codes erstellten Datensatz falsch, was in der Praxis bedeutet, dass es fast sofort falsch ist.


Halten Sie die Standardlogik leichtgewichtig

Standardfunktionen werden während der Erstellung von Datensätzen ausgeführt, was bedeutet, dass sie jedes Mal ausgeführt werden, wenn ein Benutzer ein neues Formular öffnet. Vermeiden Sie es, Datenbankabfragen durchzuführen, externe APIs aufzurufen oder schwere Berechnungen innerhalb von Standardmethoden auszuführen. Halten Sie sie schnell und einfach. Wenn Sie etwas Komplexeres benötigen, ziehen Sie in Betracht, ein onchange oder ein berechnetes Feld zu verwenden, das durch ein anderes Feld ausgelöst wird.


Verwenden Sie Kontextstandards für Navigationsflüsse

Beim Erstellen von benutzerdefinierten Aktionen oder intelligenten Schaltflächen, die ein neues Formular öffnen, übergeben Sie default_field_name Werte durch den Aktionskontext, anstatt sich auf statische Modellstandards zu verlassen. So funktionieren native Odoo-Schaltflächen und halten Ihre Odoo-Anpassung im Einklang mit den Konventionen des Frameworks.


Testen Sie Standards mit mehreren Benutzerprofilen

Dynamische Standards, die auf self.env.user oder self.env.company verweisen, verhalten sich unterschiedlich, je nachdem, wer angemeldet ist. Testen Sie immer mit mindestens zwei verschiedenen Benutzerkonten und mit unterschiedlichen Unternehmenskonfigurationen, wenn Sie ein Multi-Company-Setup betreiben. Was für einen Administrator funktioniert, kann für einen Standardbenutzer unerwartete Ergebnisse liefern.

Häufige Fallstricke


Verwendung eines veränderbaren Objekts als Standard

Dies ist der klassische Python-Fehler und gilt auch für die Odoo-Entwicklung. Schreiben Sie niemals default=[] oder default={} für ein Feld. Python teilt dasselbe Listen- oder Wörterbuchobjekt über alle Instanzen hinweg, was dazu führt, dass Daten auf unerwartete Weise zwischen Datensätzen bluten. Verwenden Sie stattdessen ein Lambda: default=lambda self: []. Dies erstellt jedes Mal ein frisches Objekt, wenn ein Datensatz initialisiert wird.


Standards lösen kein onchange aus

Das Setzen eines Standardwerts löst keine onchange Methoden aus. Wenn Ihr Formular ein onchange für ein Feld hat, das normalerweise Updates für andere Felder auslöst, umgeht der Standard diese Kettenreaktion vollständig. Benutzer sehen den vorausgefüllten Wert, aber keine der nachgelagerten Auswirkungen, die onchange normalerweise erzeugen würde. Wenn Sie möchten, dass das onchange bei der Initialisierung ausgeführt wird, müssen Sie es explizit in einer benutzerdefinierten default_get Überschreibung aufrufen oder die Logik auf andere Weise behandeln.


Konfliktierende Standardwerte von ir.default und Modelldefinition

Wenn Sie einen Standardwert sowohl in Python als auch über Studio oder einen ir.default-Datensatz festlegen, löst Odoo diese mit einer Prioritätsreihenfolge. Der ir.default-Datensatz hat Vorrang vor dem Python-Standardwert auf Modellebene. Dies ist eine häufige Quelle für Verwirrung beim Debuggen unerwarteter Feldwerte, insbesondere nach einer Studio-Konfigurationsänderung, die stillschweigend etwas überschreibt, das ein Entwickler im Code festgelegt hat.


Einen Standardwert anzunehmen bedeutet nicht, dass ein Wert erforderlich ist

Ein Feld mit einem Standardwert ist nicht automatisch erforderlich. Wenn der Benutzer das Feld leert, wird es leer gespeichert. Verlassen Sie sich nicht nur auf den Standard, um die Vollständigkeit der Daten sicherzustellen. Wenn Sie immer einen Wert in diesem Feld benötigen, kombinieren Sie den Standard mit required=True.


Festcodierte Unternehmens- oder Benutzer-Datensatz-IDs

Ein Standard wie default=1, der auf einen Benutzer oder ein Unternehmen über seine Datenbank-ID verweist, ist fragil. Es wird in jeder Umgebung brechen, in der dieser Datensatz eine andere ID hat, was praktisch jeder Produktionsdatenbank betrifft, die nicht identisch mit der Entwicklungsumgebung eingerichtet wurde. Verwenden Sie immer dynamische Referenzen: lambda self: self.env.company.id oder lambda self: self.env.ref('module.xml_id').id.

Fazit


Standardwerte sind eine kleine, aber leistungsstarke Funktion im Odoo-Datenmodell. Sie reduzieren die manuelle Dateneingabe, leiten Benutzer zu konsistenten Entscheidungen und machen Formulare für alle im Team einfacher zu verwenden. Ob Sie sie über Odoo Studio für eine schnelle No-Code-Änderung konfigurieren oder sie in Python als Teil einer technischen Anpassung definieren, das Verständnis, wie Standardwerte funktionieren, hilft Ihnen, bessere Odoo-Implementierungen zu erstellen.


Die wichtigsten Punkte, die Sie beachten sollten: Standards werden nur bei der Erstellung von Datensätzen ausgeführt, nicht kontinuierlich. Sie lösen keine onchange-Methoden aus. Mehrere Standardquellen folgen einer definierten Prioritätsreihenfolge. Und veränderbare Objekte wie Listen oder Dictionaries sollten immer in ein Lambda gewickelt werden, wenn sie als Feldstandards verwendet werden.


Die richtigen Standardwerte zu setzen, ist oft der Unterschied zwischen einem Formular, das intuitiv wirkt, und einem, das den Benutzern jedes Mal, wenn sie einen neuen Datensatz erstellen müssen, Schwierigkeiten bereitet. Es ist eine kleine Investition, die sich jeden Tag auszahlt.


Bei Dasolo helfen wir Unternehmen, Odoo zu implementieren, anzupassen und zu optimieren, um ihren spezifischen Arbeitsabläufen gerecht zu werden. Wenn Sie Hilfe bei der Konfiguration von Feldstandards, dem Erstellen benutzerdefinierter Felder oder dem Entwerfen eines Odoo-Datenmodells benötigen, das tatsächlich für Ihr Team funktioniert, helfen wir Ihnen gerne weiter. Kontaktieren Sie uns und lassen Sie uns über Ihre Odoo-Implementierung sprechen.

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