Zum Inhalt springen

Float-Feld in Odoo: Der Ultimative Leitfaden

Ein praktischer Leitfaden zum Float-Feld im Odoo-Datenmodell, von der grundlegenden Nutzung bis hin zur Präzisionskontrolle und technischen Anpassung
6. März 2026 durch
Float-Feld in Odoo: Der Ultimative Leitfaden
Dasolo
| Noch keine Kommentare

Einführung


Das Float-Feld ist einer der am häufigsten verwendeten Feldtypen in Odoo, wenn Ihre Daten Dezimalzahlen enthalten. Einheitspreise, Produktgewichte, Rabattprozentsätze, Steuersätze, Umrechnungsfaktoren in Stücklisten - all dies wird typischerweise als Float-Felder im Odoo-Datenmodell gespeichert.


Auf den ersten Blick sieht es aus wie eine einfache numerische Eingabe. Aber es gibt mehrere Dinge, die es wert sind, darüber informiert zu sein, wie es mit der Präzision umgeht, wie es sich in Berichten und Aggregationen verhält und wann Sie stattdessen einen anderen Feldtyp verwenden sollten.


Dieser Leitfaden behandelt, was das Float-Feld speichert, wie es sich im Odoo-Framework verhält, wie man es mit Odoo Studio oder Python erstellt und anpasst und reale Geschäftsanwendungsfälle in den Bereichen Vertrieb, Lager und Buchhaltung.

Was ist das Float-Feld in Odoo


Im Odoo ORM speichert das Float-Feld Dezimalzahlen. Es wird einer double precision-Spalte in PostgreSQL zugeordnet, die bis zu 15 signifikante Ziffern Präzision bietet. Für die meisten Geschäftsanwendungsfälle ist das weit mehr, als Sie benötigen.


Aus der Sicht des Benutzers erscheint ein Float-Feld als numerische Eingabe in Formularansichten. Die Anzahl der angezeigten Dezimalstellen wird durch den digits-Parameter gesteuert, den Sie für das Feld definieren. In Listenansichten werden Float-Werte mit derselben Genauigkeit angezeigt und standardmäßig rechtsbündig ausgerichtet. In Pivot-Tabellen und Grafiken nehmen Float-Felder an Aggregationen wie Summe, Durchschnitt oder Maximum teil.


So sieht es in einer Python-Modelldefinition aus:

from odoo import fields, models

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

    custom_margin = fields.Float(
        string='Custom Margin',
        digits=(5, 2),
        default=0.0,
    )

Der digits-Parameter ist ein Tupel. Die erste Zahl ist die Gesamtanzahl der signifikanten Ziffern, die zweite die Anzahl der Dezimalstellen. So erlaubt (5, 2) bis zu fünf signifikante Ziffern mit zwei Dezimalstellen.

Sie können auch eine benannte Präzisionsgruppe referenzieren, anstatt die Ziffern fest einzugeben:


price_premium = fields.Float(
    string='Price Premium',
    digits='Product Price',
)

Odoo hat mehrere integrierte Präzisionsgruppen, die unter Einstellungen > Technisch > Datenbankstruktur > Dezimalgenauigkeit verwaltet werden. Die wichtigsten sind Produktpreis, Produktmengeneinheit, Rabatt und Gewicht im Lager. Die Verwendung von Präzisionsgruppen bedeutet, dass Benutzer die Dezimalgenauigkeit über die Benutzeroberfläche anpassen können, ohne dass Änderungen am Code erforderlich sind.


Im Odoo Studio wird das Float-Feld als Dezimalzahl bezeichnet. Wenn es über Studio erstellt wird, verwendet es die Standardgenauigkeit, es sei denn, Sie konfigurieren es anders im Eigenschaftenbereich des Feldes. Dies macht es zu einem der zugänglichsten Odoo-Studio-Felder für Geschäftsanwender, die Formulare ohne Unterstützung durch Entwickler erweitern müssen.

Wie das Feld funktioniert


Wenn Sie ein Float-Feld in Odoo definieren, kümmert sich das Framework automatisch um die Erstellung der Spalte in der Datenbank während der Modulinstallation oder -aktualisierung. Es sind keine manuellen SQL- oder Migrationsskripte erforderlich.


Der digits-Parameter steuert zwei Dinge gleichzeitig: wie Werte in der Benutzeroberfläche angezeigt werden und wie sie gerundet werden, bevor sie gespeichert werden. Wenn Sie digits=(6, 2) definieren und ein Benutzer 3.14159 eingibt, rundet Odoo und speichert 3.14. Diese Rundung erfolgt auf der ORM-Ebene, nicht nur in der Anzeigeebene.


Wichtige Feldattribute

Dies sind die wichtigsten Eigenschaften, die Sie für ein Float-Feld im Odoo-Framework konfigurieren können:

  • digits: Ein Tupel wie (6, 2) oder eine benannte Präzisionsgruppenzeichenfolge. Steuert sowohl die Anzeige- als auch die Speicherpräzision.
  • required: Macht das Feld obligatorisch. Ein Float-Feld mit dem Wert 0.0 besteht den erforderlichen Test, was möglicherweise nicht immer das beabsichtigte Verhalten ist.
  • default: Standardwert, wenn ein neuer Datensatz erstellt wird. Das Setzen von default=0.0 stellt sicher, dass das Feld immer einen numerischen Wert hat, anstatt False.
  • compute: Verknüpft eine Python-Methode, die den Feldwert dynamisch berechnet. Nützlich für abgeleitete Werte wie Margen oder Umwandlungsergebnisse in Odoo berechneten Feldern.
  • store: Wenn es mit compute verwendet wird, speichert es den berechneten Wert in der Datenbank, sodass er durchsucht, gefiltert und gruppiert werden kann.
  • group_operator: Steuert, wie das Feld in Pivot- und Diagrammansichten aggregiert wird. Häufige Werte sind 'sum', 'avg', 'min' und 'max'. Float-Felder haben standardmäßig 'sum'.
  • copy: Steuert, ob der Wert beim Duplizieren eines Datensatzes kopiert wird. Standardmäßig auf True.

Wie es in Ansichten erscheint

In Formularansichten wird ein Float-Feld als numerisches Eingabefeld dargestellt. Die Anzeige respektiert die Benutzersprache für Dezimaltrennzeichen. In Listenansichten sind Float-Werte standardmäßig rechtsbündig. In Suchansichten können Sie nach Float-Werten mit numerischen Vergleichsoperatoren filtern.


Sie können Widgets auf Float-Felder in Ansichten anwenden. Das percentage-Widget multipliziert beispielsweise den gespeicherten Wert mit 100 zur Anzeige und fügt ein Prozentzeichen hinzu, was nützlich ist für Felder, die Werte im Bereich von 0-1 speichern. Dies ist ein gängiges Muster in der Odoo-Entwicklung, wenn es um Raten und Faktoren geht.


Interaktion mit dem Odoo ORM

Das Lesen eines Float-Feldes gibt Ihnen einen Python-Float oder False, wenn das Feld nicht gesetzt wurde und kein Standard definiert ist. Das Schreiben in ein Float-Feld akzeptiert Ganzzahlen, Floats oder False. Das ORM wendet die Präzision von digits beim Speichern an.


Eine wichtige Anmerkung zur Odoo-Entwicklung: Vergleichen Sie Float-Werte in Python nicht mit ==. Aufgrund der Funktionsweise der Fließkommaarithmetik auf Hardwareebene können Werte, die gleich aussehen, es möglicherweise nicht sein. Verwenden Sie stattdessen float_compare und float_is_zero aus odoo.tools.float_utils, die die im Odoo-Datenmodell definierte Feldgenauigkeit respektieren.

Geschäftsanwendungsfälle


Das Float-Feld erscheint in nahezu jedem Modul einer Odoo-Implementierung. Hier sind fünf praktische Beispiele aus realen Geschäftsabläufen.


Vertrieb: Rabattprozentsätze auf Bestellzeilen

Das native discount-Feld auf sale.order.line ist ein Float-Feld. Wenn ein Vertriebsmitarbeiter einen Rabatt von 15 % gewährt, speichert Odoo 15.0 und wendet es auf die Berechnung des Stückpreises an. Dieser Wert fließt in gedruckte Angebote und Kundenrechnungen ein und wird in Margenberichten berücksichtigt. Die korrekte Handhabung von Rabatten ist sowohl für die Kundenkommunikation als auch für die Analyse der Rentabilität des Unternehmens wichtig.


Inventar: Produktgewichte und -volumen

Produkte in Odoo haben native weight- und volume-Felder, beide Floats. Ein Produkt, das 2,5 kg wiegt oder 0,003 m3 einnimmt, benötigt eine Dezimalgenauigkeit, die ein Integer-Feld einfach nicht bieten kann. Diese Werte fließen direkt in die Berechnung der Versandkosten und die Integration von Versanddienstleistern ein. Wenn Sie Odoo mit einem Lieferanschluss verwenden, bestimmen genaue Float-Werte für Gewicht und Volumen den Versandtarif, der von der Carrier-API zurückgegeben wird.


Buchhaltung: Steuersätze

Steuersätze auf account.tax sind Float-Felder. Eine Standard-Mehrwertsteuer von 21 % wird als 21.0 gespeichert, ein ermäßigter Satz könnte 6.0 oder 5.5 sein. Die Odoo-Buchhaltungsengine liest diese Werte, um die Steuerbeträge auf jeder Rechnung und jedem Lieferantenbeleg zu berechnen. Genauigkeit ist hier wichtig, da kleine Rundungsdifferenzen sich über Hunderte von Transaktionen summieren und zu Abweichungen in den Steuerberichten führen können.


Fertigung: Mengen in Stücklisten

In der Odoo-Fertigung ist die Menge jedes Bauteils in einer Stückliste ein Float-Feld. Ein Rezept könnte 0,75 Liter einer flüssigen Zutat oder 2,5 kg eines Rohmaterials erfordern. Float-Felder verarbeiten diese Bruchmengen auf natürliche Weise. Die Verwendung eines Integer-Feldes in diesem Kontext würde eine Rundung erzwingen und Produktionsfehler einführen, die sich im Laufe der Zeit summieren.


Einkauf: Preisfaktoren und Lieferantenmargen

Bei der Einrichtung von Lieferantenpreisliste oder Aufschlagsregeln speichern Float-Felder die Multiplikatoren und Margen. Ein Margenfaktor von 1,25 (25 % Aufschlag) oder ein Rabattfaktor von 0,85 (15 % Rabatt auf den Listenpreis) sind typische Werte in der Preisgestaltung im Einkauf. Diese Float-Werte fließen in automatisierte Preisberechnungen auf Bestellungen ein und helfen den Einkaufsteams, konsistente Preise über die Lieferanten hinweg aufrechtzuerhalten.

Erstellen oder Anpassen des Float-Feldes


Es gibt drei Hauptmethoden, um ein Float-Feld zu einem Odoo-Modell hinzuzufügen, abhängig von Ihrem technischen Kontext und Ihrem Bereitstellungsansatz.

Verwendung von Odoo Studio (No Code)

Odoo Studio ist das integrierte Low-Code-Anpassungstool. Um ein Float-Feld hinzuzufügen, ohne Code zu schreiben:


  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 Dezimalzahl-Feld aus dem Feldauswahlmenü in das Formular.
  4. Legen Sie das Label, den Standardwert und die Anzahl der Dezimalstellen im Eigenschaftenbereich fest.
  5. Speichern und schließen Sie Studio.

Studio erstellt das Feld mit einem x_studio_-Präfix und fügt es automatisch zur Formularansicht hinzu. Es sind keine Datenbankarbeiten Ihrerseits erforderlich. Dies ist eine der zugänglichsten Methoden, um Felder in Odoo für Benutzer zu erstellen, die Odoo-Anpassungen ohne technische Komplexität wünschen.


Verwendung von Python in einem benutzerdefinierten Modul

Für Entwickler, die Odoo-Module erstellen, werden Float-Felder direkt in Python definiert. Dies ist der empfohlene Ansatz für jede Odoo-Entwicklung, die versionskontrolliert und in mehreren Umgebungen bereitgestellt werden muss:


from odoo import fields, models

class ResPartner(models.Model):
    _inherit = 'res.partner'

    x_credit_limit = fields.Float(
        string='Kreditlimit',
        digits=(12, 2),
        default=0.0,
        help='Maximaler ausstehender Betrag, der für diesen Kunden erlaubt ist.',
    )

Nachdem Sie das Feld zum Modell hinzugefügt haben, fügen Sie es in die relevante View-XML ein, damit es in der Benutzeroberfläche erscheint. Odoo verwaltet die Datenbankspalte automatisch bei der Modulinstallation oder -aktualisierung. Dies ist der Standardansatz im Odoo-Entwicklerhandbuch für ernsthafte Odoo-Anpassungsarbeiten.


Verwendung der XML-RPC-API

Wenn Sie Odoo-Anpassungen programmgesteuert verwalten, zum Beispiel über ein Bereitstellungsskript oder ein entferntes Konfigurationsnotizbuch, können Sie Float-Felder über die XML-RPC-API erstellen:

field_id = models.execute_kw(
    ODOO_DB, uid, ODOO_API_KEY,
    'ir.model.fields', 'create',
    [{
        'name': 'x_custom_coefficient',
        'field_description': 'Custom Coefficient',
        'model_id': model_id,
        'ttype': 'float',
        'state': 'manual',
    }]
)

Der Wert state: manual teilt Odoo mit, dass dieses Feld manuell und nicht durch ein Modul erstellt wurde, was die korrekte Einstellung für Felder ist, die über Studio oder die API erstellt wurden. Die Dezimalgenauigkeit für über die API erstellte Float-Felder wird über die Einstellungen zur Dezimalgenauigkeit im technischen Menü verwaltet. Dies ist der Ansatz, den Dasolo für die remote Feldcreation im Rahmen automatisierter Odoo-Konfigurationsskripte verwendet.

Best Practices


1. Verwenden Sie benannte Präzisionsgruppen für Standardwerte

Anstatt digits=(6, 2) fest zu codieren, verweisen Sie auf eine Präzisionsgruppe wie 'Product Price' oder 'Product Unit of Measure'. Dies ermöglicht es Benutzern mit technischem Zugang, die Präzision über die Benutzeroberfläche ohne Codeänderungen anzupassen, und es stimmt Ihre benutzerdefinierten Felder mit der gleichen Präzision wie native Odoo-Felder im gleichen Kontext ab.


2. Verwenden Sie Monetary für Währungsbeträge, nicht Float

Dies ist der wichtigste Punkt in dieser Liste. Das Monetary-Feld ist speziell für Beträge mit einer Währung konzipiert. Es ist mit einem Währungsfeld im gleichen Modell verknüpft, behandelt das Runden gemäß den Währungsregeln und funktioniert korrekt in Multi-Währungs-Umgebungen. Die Verwendung eines Float-Feldes für Rechnungsbeträge oder Verkaufspreise führt zu Rundungsinkonsistenzen und bricht die Multi-Währungs-Berichterstattung.


3. Setzen Sie immer einen Standardwert

Setzen Sie default=0.0 für numerische Felder, die bei null beginnen sollen. Ohne einen Standardwert ist der Feldwert False (null in der Datenbank), bis der Benutzer ihn ausfüllt. Dies kann unerwartete Fehler in berechneten Feldern oder Python-Methoden verursachen, die davon ausgehen, dass immer ein numerischer Wert vorhanden ist.


4. Setzen Sie group_operator für Berichte

Wenn ein Float-Feld eine Menge oder einen Betrag darstellt, der in Berichten sinnvoll summiert werden kann, fügen Sie group_operator='sum' hinzu. Wenn es sich um einen Satz oder einen Prozentsatz handelt, bei dem eine Durchschnittsbildung sinnvoller ist, verwenden Sie group_operator='avg'. Dies richtig zu machen, stellt sicher, dass Pivot-Tabellen und Diagrammansichten Ihre Daten sinnvoll aggregieren, was in Odoo-Datenbankfeldern, die für Analysen verwendet werden, von großer Bedeutung ist.


5. Dokumentieren Sie Ihre Prozentkonventionen

Wenn ein Float-Feld einen Prozentsatz speichert, seien Sie explizit, ob es einen Bereich von 0-100 (wie das native discount-Feld: 15.0 für 15%) oder einen Bereich von 0-1 (wie einige Margenfelder: 0.15 für 15%) verwendet. Das Mischen dieser Konventionen in einem Datenmodell führt zu stillen Berechnungsfehlern, die nachträglich sehr schwer nachzuvollziehen sind.


Häufige Fallstricke


Float für Geldbeträge verwenden

Float-Felder enthalten keine Währungsinformationen. Ein Float-Feld, das 1500 anzeigt, könnte Euro, Dollar oder etwas anderes sein. In einer Multi-Währungs-Odoo-Konfiguration führt dies zu falschen Summen in Finanzberichten. Verwenden Sie den Feldtyp Monetary für jeden Betrag, der eine Währung hat.


Das Nichtsetzen des Parameters digits

Ohne explizite digits wendet Odoo eine Standard-Float-Präzision von 2 Dezimalstellen an. Dies ist für Preise in Ordnung, jedoch nicht für Felder, die 4 oder 6 Dezimalstellen benötigen, wie Wechselkurse oder Umrechnungsfaktoren. Ein Umrechnungsfaktor, der stillschweigend auf 2 Dezimalstellen gerundet wird, führt zu kumulativen Fehlern in jeder Transaktion, die ihn verwendet.


Float-Werte mit == in Python vergleichen

Aufgrund der Funktionsweise von Fließkommazahlen auf Hardwareebene können zwei Float-Werte, die identisch aussehen, beim Vergleich mit == ungleich sein. Zum Beispiel ergibt 0.1 + 0.2 == 0.3 in Python False. Verwenden Sie float_compare(value1, value2, precision_digits=2) und float_is_zero(value, precision_digits=2) aus odoo.tools.float_utils für zuverlässige Vergleiche. Dies ist ein häufiger Punkt in jedem Odoo-Technik-Tutorial zu diesem Thema.


Float verwenden, wenn Integer die richtige Wahl ist

Wenn ein Feld immer ganze Zahlen enthält, wie eine Anzahl, eine Anzahl von Paketen oder eine Sequenznummer, verwenden Sie stattdessen ein Integer-Feld. Float-Felder für ganze Zahlen sind technisch nicht falsch, schaffen jedoch unnötige Verwirrung und laden Benutzer ein, Dezimalwerte einzugeben, wo im Geschäftskontext keine sinnvoll sind.


Nichtbehandlung von False-Werten in Berechnungsmethoden

Ein Float-Feld ohne Standardwert gibt False zurück (nicht 0.0), wenn noch kein Wert festgelegt wurde. Wenn Sie Berechnungen auf Basis von Float-Feldern durchführen, überprüfen Sie immer auf False, bevor Sie arithmetische Operationen durchführen, oder fügen Sie einfach default=0.0 zur Felddefinition hinzu. Dies verhindert TypeError-Ausnahmen in Berechnungsmethoden, die nur in realen Datenszenarien auftreten.

Fazit


Das Float-Feld ist ein grundlegender Baustein des Odoo-Datenmodells. Es verarbeitet Dezimalzahlen für Preise, Mengen, Sätze und Messungen und tut dies zuverlässig, wenn es mit der richtigen Präzision und den richtigen Standardwerten konfiguriert ist.


Die wichtigsten Punkte, die Sie beachten sollten: Verwenden Sie benannte Präzisionsgruppen für Standardwerte, verwenden Sie Monetary anstelle von Float für Währungsbeträge, setzen Sie immer einen Standardwert und dokumentieren Sie Ihre Konventionen für Prozentfelder. Diese Gewohnheiten verhindern die häufigsten Probleme mit der Datenqualität, bevor sie die Chance haben, in der Produktion Probleme zu verursachen.

Egal, ob Sie Felder über Odoo Studio hinzufügen, ein benutzerdefiniertes Python-Modul schreiben oder Ihr Datenmodell programmgesteuert über die Odoo ORM oder XML-RPC API verwalten, von Anfang an die Float-Felder richtig zu gestalten, sorgt für eine insgesamt sauberere und zuverlässigere Implementierung.

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, beim Hinzufügen benutzerdefinierter Felder zu Ihren Formularen oder beim Erstellen eines vollständigen Odoo-Moduls von Grund auf benötigen, unser Team ist hier, um Sie zu unterstützen. Nehmen Sie Kontakt mit uns auf und lassen Sie uns über Ihr Odoo-Projekt sprechen.

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