Zum Inhalt springen

Standardwerte in Odoo-Feldern: Der umfassende Praxis‑Guide

Automatisch Formularfelder in Odoo vorausfüllen: Von festen Vorgabewerten über kontextabhängige Defaults bis zu dynamischen Berechnungen
6. März 2026 durch
Standardwerte in Odoo-Feldern: Der umfassende Praxis‑Guide
Dasolo
| Noch keine Kommentare

Einleitung


Jedes Formular in Odoo besteht aus Feldern — einige müssen bei jeder Neuerstellung händisch befüllt werden, andere können bereits mit einer sinnvollen Vorlage starten. Standardwerte sorgen dafür, dass Nutzer beim Öffnen eines neuen Datensatzes nicht vor leeren Eingabefeldern stehen, sondern ein vernünftiger Ausgangszustand vorfinden. Hinter dieser simplen Idee verbirgt sich eine Schicht von Regeln und Mechaniken, die Sie kennen sollten, wenn Sie Formulare konfigurieren oder anpassen.


Egal ob Sie als Key-User mit Odoo Studio Felder anpassen oder als Entwickler Models erweitern: das Verständnis, wie Default-Werte wirken, spart Zeit und verhindert schwer auffindbare Konfigurationsprobleme, die später zu Fehlern führen können.


Diese Anleitung erklärt, was Default-Werte in Odoo bedeuten, wie das ORM sie zur Laufzeit auflöst, wann statische gegenüber dynamischen Defaults sinnvoll sind und welche Wege es gibt, sie per Studio oder per Python-Code zu setzen.

Was versteht Odoo unter einem Standardwert?


Auf Modellebene ist ein Default der Wert, der einem Feld bei der Erstellung eines neuen Datensatzes zugewiesen wird, bevor der Anwender etwas eingibt. Es handelt sich dabei nicht um eine Einschränkung: Nutzer können den vorgeschlagenen Wert frei überschreiben. Ein Standardwert ist lediglich ein voreingestellter Vorschlag, der Formulare sofort nützlicher macht.


Das Framework erlaubt Default-Angaben für praktisch alle Feldtypen — Char, Integer, Float, Boolean, Date, Many2one, Selection usw. Als Default kann ein fester Wert, eine Python-Lambda oder eine Methodenreferenz dienen. Je nach Anforderung ist die eine oder andere Variante sinnvoll.


In Odoo Studio finden Sie Default-Einstellungen direkt in den Feld-Eigenschaften. Geschäftsanwender können dort ohne Programmierkenntnisse feste Standardwerte vergeben. Das ist eine sehr zugängliche Möglichkeit, die Datenqualität zu erhöhen, ohne Entwickler einzubinden.


Standardwerte werden nicht als Spalten-Default in der Datenbank gespeichert. Sie existieren in der Modell-Definition (Python) oder als Einträge im ir.default-Mechanismus in der Datenbank, je nachdem, wie sie angelegt wurden. Beim Erstellen eines neuen Datensatzes liest Odoo diese Quellen aus und füllt die Felder vorab.

Wie Standardwerte in Odoo funktionieren


Wenn ein Nutzer ein neues Formular öffnet, ruft das Framework die Methode default_get() des entsprechenden Modells auf. Diese sammelt die Default-Werte und liefert ein Dictionary mit Feldnamen und ihren Startwerten zurück, das anschließend zur Vorbefüllung des Formulars genutzt wird.

In Odoo unterscheidet man grob zwischen vier Default-Typen, die verschiedene Anforderungen abdecken.


Statische Defaults

Statische Defaults sind feste Werte, die entweder im Model hartkodiert oder per Studio gesetzt werden — etwa ein Boolean, der standardmäßig auf True steht, oder ein Statusfeld, das als 'Entwurf' startet. Für viele Standardfälle sind sie ausreichend und besonders einfach zu handhaben.


Dynamische Defaults (Lambda/Methoden)

Dynamische Defaults werden durch eine Funktion oder Lambda zur Laufzeit erzeugt. So lassen sich Werte abhängig vom aktuellen Datum, vom angemeldeten Nutzer oder anderen Kontextdaten setzen — zum Beispiel die Zuweisung des aktuell eingeloggten Mitarbeiters als Standardverantwortlichen oder das heutige Datum als Belegdatum.


Der Python‑Code zeigt das typische Muster für statische und dynamische Defaults in einem Modell.


from odoo import fields, models

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

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

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

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

Kontextbasierte Defaults

Über die Action‑Context-Konvention default_field_name können beim Öffnen eines Formulars Werte mitgegeben werden. Das passiert oft dann, wenn man ein neues Objekt aus einem verwandten Datensatz anlegt — etwa eine Aufgabe aus einem Projekt: dann wird das Projekt automatisch als Default gesetzt. Solche Kontext‑Defaults steuern Navigationsflüsse und lassen sich von Entwicklern oder fortgeschrittenen Nutzern konfigurieren.


Benutzerspezifische Defaults über ir.default

Mit ir.default lassen sich persönliche Voreinstellungen pro Nutzer anlegen. Admins können so für einzelne Anwender andere Startwerte definieren; diese individuellen Defaults haben Vorrang vor Model-Defaults. Das ist praktisch in Teams, in denen verschiedene Benutzer unterschiedliche Arbeitsgewohnheiten haben.


Vorrangregeln

Existieren mehrere Default-Quellen, löst Odoo den Konflikt nach einer festen Reihenfolge: zuerst nutzerspezifische ir.default, dann firmenweite ir.default, danach das Default aus der Python‑Modell-Definition. Zur Laufzeit übergebene Kontext‑Defaults können Modell‑Defaults ebenfalls überschreiben. Diese Reihenfolge erklärt oft, warum ein Feld beim Erstellen eines neuen Datensatzes nicht den erwarteten Wert zeigt.

Praxisbeispiele aus dem Unternehmensalltag


Standardwerte finden sich quer durch alle Odoo-Module. Im Folgenden fünf typische Anwendungsfälle aus der Praxis.


CRM: Standard‑Verkäufer für neue Leads

Damit Leads nicht ohne Zuständigen starten, wird das Feld Verantwortlicher häufig standardmäßig auf den aktuell angemeldeten Benutzer gesetzt. Diese kleine Einstellung erhöht die Nutzung des CRM, weil Anwender ihre Leads sofort sehen, ohne sie erst zuzuweisen.


Vertrieb: Standard-Zahlungsbedingungen auf Bestellungen

Bei Angebots- oder Auftragserstellung werden Zahlungsbedingungen und Preisliste oft aus den Kundendaten übernommen. Ein Kunde mit Zahlungsbedingung '30 Tage' hat diese Einstellung automatisch auf neuen Aufträgen — das minimiert Fehler und sorgt für Konsistenz, selbst wenn verschiedene Verkäufer Aufträge anlegen.


Lager: Standardorte bei Umlagerungen

Beim Anlegen eines internen Transfers oder einer Inventur werden Quell‑ und Zielort aus den Lagereinstellungen vorgegeben. Lagerpersonal, das immer in derselben Zone arbeitet, findet so den korrekten Ort bereits vorausgewählt und spart Klicks sowie mögliche Fehlplatzierungen.


Buchhaltung: Standardjournal für Buchungen

Neue Kundenrechnungen oder Lieferantenrechnungen werden automatisch mit dem passenden Journal vorbelegt, abhängig von Buchungstyp und Firmenkonfiguration. Das verhindert, dass Buchhalter bei jeder Buchung das Journal manuell auswählen müssen und bleibt korrekt, wenn Journale später umkonfiguriert werden.


Projekt: Standard‑Phase für neue Aufgaben

Beim Anlegen einer Aufgabe innerhalb eines Projekts startet die Aufgabe in der ersten Phase des Projekts. Wird die Aufgabe vom Projekt aus erstellt, sorgt der Kontext oft zusätzlich dafür, dass Projekt und manchmal auch der Zuständige voreingestellt sind. So landen neue Aufgaben direkt dort, wo sie hingehören.

Standardwerte anlegen oder anpassen


Drei Wege führen zu Default-Werten in Odoo: Studio für No‑Code, Python für vollständige Kontrolle und ir.default für datenbankgestützte Einstellungen.


Per Odoo Studio (kein Code)

Odoo Studio bietet eine grafische Oberfläche, um Default‑Werte auf Formularfeldern zu setzen. So geht es:

  • Studio auf dem gewünschten Formular öffnen
  • Das Feld anklicken, das angepasst werden soll
  • Im Eigenschaften‑Panel rechts den Bereich für Default‑Werte finden
  • Den gewünschten Startwert eintragen oder auswählen
  • Speichern und Studio verlassen

Studio legt diese Konfiguration als ir.default‑Eintrag in der Datenbank ab und gilt in der Regel firmenweit, sofern kein Benutzer‑Scope gesetzt ist. Das ist ideal für statische Defaults bei Selection, Boolean, Char oder Integer. Bei Many2one‑Feldern können Sie einen bestehenden Datensatz aus einer Liste wählen. Beachten Sie: Änderungen per Studio wirken nur auf neu angelegte Datensätze.

Wichtig: Ein nachträglicher Wechsel des Studio‑Defaults verändert bereits gespeicherte Datensätze nicht — er gilt nur für neu erstellte Einträge.


Per Python in technischen Anpassungen

In technischen Customizations setzen Sie Defaults im Python‑Felddefinition. Das erlaubt statische Werte, Lambda‑Ausdrücke und methodengebundene Defaults mit voller Kontrolle über Laufzeitinformationen wie aktuellen Benutzer, Datum oder Firmenkontext — daher die empfohlene Methode bei Entwickler‑Projekten.


Das folgende Beispiel zeigt verschiedene Default‑Typen, wie sie in einem Custom‑Modul vorkommen können:


from odoo import fields, models

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

    # Statischer Boolean‑Default
    x_requires_review = fields.Boolean(
        string='Benötigt Prüfung',
        default=False,
    )

    # Statische Auswahl‑Vorgabe
    x_delivery_preference = fields.Selection(
        [('standard', 'Standard'), ('express', 'Express')],
        string='Lieferpräferenz',
        default='standard',
    )

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

    x_internal_note = fields.Text(
        string='Interne Notiz',
        default=_default_note,
    )

Dieses Muster entspricht den üblichen Odoo‑Konventionen und funktioniert für alle Feldtypen; methodenbasierte Defaults sind dann nützlich, wenn die Logik zu komplex für eine kurze Lambda wäre.


ir.default‑Einträge programmatisch setzen

Sie können ir.default‑Records auch per XML‑Datenfile in einem Modul oder über die XML‑RPC API anlegen. Das ist praktisch, wenn ein installierbares Modul gleich die passenden Startwerte mitliefern soll — etwa firmenweite Vorgaben, die beim Modul‑Installationsprozess gesetzt werden.


Diese Methode ist weniger alltäglich, taucht aber beim Verpacken von Standardkonfigurationen in Modulen regelmäßig auf.

Gute Vorgehensweisen für Standardwerte in Odoo


Defaults für Pflichtfelder setzen

Ist ein Feld zwingend, sollten Sie möglichst gleich einen sinnvollen Default angeben. So vermeiden Sie Fehler beim Speichern, wenn Anwender ein neues Formular absenden, ohne das Pflichtfeld zu füllen. Die Kombination required=True mit einem passenden Default ist eine saubere Praxis.


Datumsdefaults per Lambda setzen

Vermeiden Sie fest kodierte Datumswerte als Default. Nutzen Sie lambda self: fields.Date.today(), damit das Datum beim Anlegen des Datensatzes tatsächlich aktuell ist. Ein hartes Datum wäre bereits kurz nach dem Deployment falsch.


Default‑Logik schlank halten

Default‑Funktionen laufen bei jedem Öffnen eines neuen Formulars. Deshalb sollten sie keine aufwändigen DB‑Abfragen, API‑Calls oder teure Berechnungen enthalten. Halten Sie Defaults schnell und simpel; komplexere Logik gehört in onchanges oder berechnete Felder, nicht in Default‑Methoden.


Kontext‑Defaults für Navigationsflüsse nutzen

Wenn Sie Aktionen oder Buttons bauen, die neue Formulare öffnen, geben Sie gewünschte Startwerte via action‑context (default_field_name) mit. So verhalten sich Ihre Anpassungen wie die nativen Odoo‑Funktionen und bleiben konsistent mit dem Framework.


Defaults mit mehreren Nutzerprofilen testen

Dynamische Defaults, die self.env.user oder self.env.company referenzieren, verhalten sich je nach angemeldetem Benutzer unterschiedlich. Testen Sie stets mit mindestens zwei Nutzerkonten und, falls relevant, mit mehreren Firmenkonfigurationen. Was für einen Admin passt, liefert für Standardnutzer nicht immer das gleiche Resultat.

Typische Fehlerquellen


Keine veränderbaren Objekte als Default verwenden

Der klassische Python‑Fehler: default=[] oder default={} verwenden führt dazu, dass dieselbe Liste/Dict zwischen Instanzen geteilt wird. Das verursacht unerwartete Datenverschmutzung. Nutzen Sie stattdessen lambda self: [] oder lambda self: {} – so entsteht bei jeder Initialisierung ein neues Objekt.


Defaults lösen kein onchange aus

Ein gesetzter Default feuert keine onchange‑Methoden. Wenn Ihr Formular auf einem Feld onchange‑Logik auslöst, werden diese Effekte beim Setzen eines Default‑Wertes nicht automatisch ausgeführt. Benötigen Sie das, muss die onchange‑Logik explizit in einer default_get‑Überschreibung oder anders implementiert werden.


Konflikte zwischen ir.default und Modell‑Definition

Wenn sowohl im Code als auch per Studio/ir.default ein Wert gesetzt wurde, gewinnt der ir.default‑Eintrag. Das führt häufig zu Verwirrung beim Debugging, weil eine stille Studio‑Änderung das Entwickler‑Default übersteuern kann.


Default ist nicht gleich Pflicht

Ein Feld mit Default ist nicht automatisch required. Nutzer können den Wert löschen und das Feld leer speichern. Wenn ein Wert zwingend sein soll, kombinieren Sie Default mit required=True.


Keine harten IDs als Default verwenden

Einen Default wie default=1 für Benutzer oder Firmen zu setzen ist brüchig: IDs unterscheiden sich zwischen Datenbanken. Verwenden Sie stattdessen dynamische Referenzen wie lambda self: self.env.company.id oder self.env.ref('modul.xml_id').id.

Fazit


Richtig eingesetzte Default‑Werte sind ein kleines, aber wirksames Mittel, um Dateneingaben zu reduzieren, Nutzer zu führen und Formulare komfortabler zu machen. Ob per Studio für schnelle No‑Code‑Anpassungen oder per Python für komplexe Szenarien — wer Default‑Mechaniken versteht, baut robustere Odoo‑Lösungen.


Wesentliche Merkmale im Überblick: Defaults werden nur beim Anlegen ausgeführt, sie lösen keine onchanges aus, es gibt eine feste Prioritätsreihenfolge bei mehreren Quellen, und veränderliche Objekte müssen über Lambdas neu erzeugt werden.


Gut konfigurierte Defaults trennen intuitive Formulare von solchen, die Anwendern ständig Arbeit machen. Ein geringer Initialaufwand bei der Einrichtung zahlt sich durch tägliche Zeitersparnis aus.


Bei Dasolo unterstützen wir Unternehmen dabei, Odoo passend zu konfigurieren, anzupassen und zu optimieren. Wenn Sie Hilfe bei der Einrichtung von Feld‑Defaults, beim Erstellen eigener Felder oder beim Design eines praxisgerechten Datenmodells benötigen, begleiten wir Sie gern. Kontaktieren Sie uns und lassen Sie uns über Ihre Odoo‑Lösung sprechen.

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