Jedes Unternehmen ist anders. Ihr Team verfolgt Informationen, die keine Standardsoftware vorausahnt, und genau hier kommen benutzerdefinierte Felder in Odoo ins Spiel.
Anstatt Ihre Arbeitsabläufe dazu zu zwingen, sich an ein starres Datenmodell anzupassen, ermöglicht Odoo das Hinzufügen neuer Felder zu fast jedem Datensatz, sei es ein Kunde, eine Verkaufsbestellung, ein Produkt oder eine Rechnung. Sie entscheiden, welche Daten erfasst werden sollen, und Odoo speichert sie zusammen mit allem anderen.
Dieser Leitfaden behandelt alles, was Sie wissen müssen: was benutzerdefinierte Felder sind, wie sie im Hintergrund funktionieren, wie man sie mit oder ohne Code erstellt und wie man sie so verwendet, dass Ihre Odoo-Instanz sauber und wartbar bleibt.
Was ist ein benutzerdefiniertes Feld in Odoo
Ein benutzerdefiniertes Feld ist ein Datenbankfeld, das Sie zu einem bestehenden Odoo-Modell hinzufügen, über das hinaus, was standardmäßig enthalten ist. Es speichert ein spezifisches Stück Information, das an einen Datensatz gebunden ist, genau wie ein natives Feld.
In Odoo werden benutzerdefinierte Felder durch das Präfix x_ identifiziert. Felder, die über Odoo Studio erstellt werden, verwenden Namen wie x_studio_priority_level, während programmatisch hinzugefügte Felder ein projektbezogenes Präfix verwenden könnten, wie x_dasolo_cost_center.
Aus der Benutzeroberfläche sieht ein benutzerdefiniertes Feld genau so aus und verhält sich genau so wie jedes Standardfeld. Es kann in Formularen, Listenansichten, Filtern, Gruppierungsoptionen und Berichten erscheinen. Benutzer, die die technische Seite nicht kennen, werden den Unterschied niemals bemerken.
Verfügbare Feldtypen
Odoo unterstützt eine breite Palette von Feldtypen für benutzerdefinierte Felder, die die meisten Datenbedürfnisse abdecken:
- Text (Char): Kurzer Text, wie ein Referenzcode oder ein Label
- Langtext: Mehrzeiliger Freitext für Notizen oder Beschreibungen
- Ganzzahl: Ganze Zahlen, nützlich für Zählungen oder Punktzahlen
- Dezimal (Float): Zahlen mit Dezimalstellen, für Messungen oder Raten
- Monetär: Währungsabhängiger Betrag, der mit einem Währungsfeld verknüpft ist
- Boolean: Ein Wahr/Falsch Kontrollkästchen
- Datum / Datum & Uhrzeit: Kalenderdatum oder Zeitstempel
- Auswahl: Eine feste Dropdown-Liste von Optionen
- Many2one: Ein Link zu einem einzelnen Datensatz in einem anderen Modell
- One2many: Eine Liste von verwandten Datensätzen aus einem anderen Modell
- Many2many: Mehrere Datensätze, die aus einem anderen Modell verknüpft sind
- Binary: Datei-Anhang
- HTML: Reichhaltiger Textinhalt
Die Wahl des richtigen Feldtyps von Anfang an erspart später viel Ärger. Ein Auswahlfeld ist fast immer besser als ein Freitextfeld, wenn die Menge der möglichen Werte im Voraus bekannt ist.
Wie das Feld funktioniert
Odoo basiert auf einem Framework namens Odoo ORM (Object-Relational Mapping). Jedes Formular, jede Listenansicht und jeder Datensatz, den Sie in der Benutzeroberfläche sehen, wird von einem Python-Modell unterstützt, das einer Datenbanktabelle zugeordnet ist. Wenn Sie ein benutzerdefiniertes Feld hinzufügen, registriert Odoo es im ORM und erstellt automatisch die entsprechende Spalte in PostgreSQL.
Das ist es, was das Odoo-Datenmodell flexibel macht: Sie patchen nicht den Quellcode. Sie erweitern das Modell über eine Metadatenebene, die in der ir.model.fields-Tabelle gespeichert ist. Odoo liest diese Tabelle beim Start und erstellt die Felder dynamisch.
Felder, die im Code definiert sind, vs. Felder, die in der Datenbank definiert sind
In der standardmäßigen Odoo-Entwicklung werden Felder direkt in Python-Modellklassen unter Verwendung des Odoo-Frameworks definiert. Eine typische Felddefinition sieht so aus:
from odoo import models, fields
class SaleOrder(models.Model):
_inherit = 'sale.order'
cost_center = fields.Char(string='Kostenstelle')
Benutzerdefinierte Felder, die über die Benutzeroberfläche oder API erstellt werden, folgen einem anderen Weg: Sie werden mit state = 'manual' in ir.model.fields gespeichert und zur Laufzeit geladen. Beide Ansätze erzeugen eine echte Datenbankspalte und verhalten sich aus der Benutzerperspektive identisch.
Relationale Felder und Gegenseitigkeit
Wenn Sie ein Many2one benutzerdefiniertes Feld erstellen, das auf ein anderes Modell verweist, erwartet Odoo ein entsprechendes One2many Feld auf der anderen Seite. Dies ist nicht nur eine Konvention: Es ist die Art und Weise, wie das Odoo ORM Beziehungen zwischen Datensätzen navigiert.
Wenn Sie beispielsweise ein x_project_id (Many2one zu project.project) auf einem Verkaufsauftrag hinzufügen, sollten Sie auch x_sale_order_ids (One2many zurück zu sale.order) im Projektmodell hinzufügen. Ohne dies ist die Navigation vom Projekt zu seinen verknüpften Aufträgen über die Standardoberfläche nicht möglich.
Berechnete benutzerdefinierte Felder
Odoo berechnete Felder sind Felder, deren Wert automatisch basierend auf anderen Feldern berechnet wird, anstatt vom Benutzer eingegeben zu werden. In technischen Anpassungen definieren Sie eine Python-Methode und verknüpfen sie mit dem Feld über den compute Parameter. Diese Felder sind schreibgeschützt und werden aktualisiert, wann immer sich ihre Abhängigkeiten ändern.
Berechnete Felder sind leistungsstark, erfordern jedoch Code. Sie können derzeit nicht über Odoo Studio ohne Entwicklungsmodus und etwas Python-Wissen erstellt werden.
Geschäftliche Anwendungsfälle
Benutzerdefinierte Felder erscheinen in fast jedem Odoo-Projekt, an dem wir bei Dasolo arbeiten. Hier sind fünf häufige Szenarien aus realen Geschäftsabläufen.
1. CRM: Leads präziser qualifizieren
Standard-Odoo-Leads erfassen Kontaktdaten und Pipeline-Stufen, aber viele Vertriebsteams benötigen mehr. Ein Auswahlfeld für "Kundenbranche" oder ein Many2one, das auf ein internes "Marktsegment"-Modell verweist, ermöglicht es Vertriebsmitarbeitern, Leads schneller zu qualifizieren und dem Management, über die Pipeline nach Segmenten zu berichten.
2. Vertrieb: Verfolgung interner Projektcodes
Unternehmen, die Kunden nach Projekt abrechnen, müssen oft einen internen Projektcode oder Budgetverweis an jedes Angebot oder jeden Verkaufsauftrag anhängen. Ein einfaches Char-Feld mit dem Namen "Projektcode" auf sale.order macht dies möglich, ohne eine vollständige Projektmanagement-Integration. Das Feld erscheint auf gedruckten Dokumenten und kann verwendet werden, um Aufträge in Berichten zu filtern und zu gruppieren.
3. Inventar: Produktspezifische Attribute
Über die standardmäßigen Produktattribute von Odoo hinaus müssen Unternehmen manchmal technische Spezifikationen verfolgen, die einzigartig für ihre Branche sind. Ein Hersteller könnte Felder für "Garantiezeitraum (Monate)" (Integer), "Zertifizierungsstandard" (Auswahl) oder "Herkunftsland" (Many2one zu res.country) hinzufügen. Diese Felder integrieren sich natürlich in das Produktformular und sind in Inventarberichten verfügbar.
4. Buchhaltung: Budget- und Kostenstellenzuweisung
Finanzteams müssen häufig Rechnungen oder Buchungssätze mit einer Kostenstelle oder Budgetzeile kennzeichnen. Ein Many2one-Feld auf account.move, das auf ein benutzerdefiniertes "Kostenstellen"-Modell verweist, ermöglicht eine detaillierte Kostenverteilung, ohne die analytische Buchhaltungsstruktur von Odoo zu ändern. Filter, Pivot-Tabellen und Exporte respektieren das Feld sofort nach der Erstellung.
5. HR: Benutzerdefinierte Onboarding-Daten
HR-Abteilungen sammeln häufig Daten während des Onboardings, die nicht in die standardmäßigen Mitarbeiterfelder passen: vertragsarten, die spezifisch für ein Land sind, interne Fähigkeitskategorien oder Referenzen zur Flottenzuweisung. Benutzerdefinierte Felder auf hr.employee halten diese Informationen innerhalb von Odoo, anstatt sie in einer separaten Tabelle zu speichern, wodurch sie durchsuchbar und berichtbar werden.
Erstellen oder Anpassen des Feldes
Es gibt zwei Hauptwege, um benutzerdefinierte Felder in Odoo zu erstellen. Die richtige Wahl hängt von Ihren technischen Ressourcen und der Komplexität des Feldes ab.
Option 1: Odoo Studio (Keine Programmierung)
Odoo Studio-Felder sind der schnellste Weg für Geschäftsanwender. Mit aktiviertem Studio können Sie in wenigen Klicks ein neues Feld zu jeder Ansicht hinzufügen:
- Öffnen Sie die App und den Datentyp, in den Sie das Feld einfügen möchten (zum Beispiel ein Verkaufsauftrag-Formular)
- Klicken Sie auf das Stiftsymbol, um in den Studio-Bearbeitungsmodus zu gelangen
- Ziehen Sie einen Feldtyp aus dem linken Panel auf das Formular
- Legen Sie das Feldlabel, den technischen Namen und alle zusätzlichen Eigenschaften fest
- Speichern Sie und verlassen Sie das Studio
Studio erstellt das Feld in ir.model.fields mit dem x_studio_ Präfix und fügt es direkt zur Ansicht hinzu. Es sind keine Bereitstellungen oder Serverneustarts erforderlich. Dies ist der empfohlene Ansatz für einfache Felder, die keine benutzerdefinierte Logik erfordern.
Option 2: Technische Anpassung über die API
Für Teams, die an Odoo-Anpassungsprojekten arbeiten, können Felder programmgesteuert über die XML-RPC-API oder durch Schreiben eines Python-Moduls erstellt werden. Dies ist der richtige Weg, wenn Sie berechnete Felder, komplexe Domänenfilter oder Felder benötigen, die Teil eines versionskontrollierten Codes sind.
Mit der API sieht die Erstellung eines benutzerdefinierten Auswahlfelds auf einem Verkaufsauftrag so aus:
# Finden Sie die Modell-ID für sale.order
model = models.execute_kw(
db, uid, api_key,
'ir.model', 'search_read',
[['model', '=', 'sale.order']],
{'fields': ['id', 'name']}
)[0]
# Erstellen Sie das benutzerdefinierte Feld
field_id = models.execute_kw(
db, uid, api_key,
'ir.model.fields', 'create',
[{
'name': 'x_project_type',
'field_description': 'Projektart',
'model_id': model['id'],
'ttype': 'selection',
'selection': [('internal', 'Intern'), ('client', 'Kunde'), ('rd', 'F&E')],
'state': 'manual',
}]
)
Dies ist Teil des standardmäßigen Odoo-Entwicklerhandbuchs für das Hinzufügen von Feldern, ohne Quellcodedateien zu ändern. Es ist besonders nützlich für Remote-Konfigurationen und automatisierte Bereitstellungsskripte.
Für einen vollständigen Python-Modulansatz werden Felder in einer Modellklasse definiert und über den standardmäßigen Odoo-Modulmechanismus geladen. Dies ist die wartungsfreundlichste Option für Felder, die über Upgrades hinweg bestehen bleiben und in der Versionskontrolle verfolgt werden müssen.
Feld zur Ansicht hinzufügen
Das Erstellen eines Feldes macht es nicht automatisch in der Benutzeroberfläche sichtbar. Sie müssen es auch zur entsprechenden Formular- oder Listenansicht hinzufügen. Mit Studio geschieht dies gleichzeitig mit der Erstellung des Feldes. Bei technischen Anpassungen ändern Sie entweder direkt die XML-Ansicht oder erstellen eine abgeleitete Ansicht, die das Feld an der richtigen Stelle einfügt.
Best Practices
Benutzerdefinierte Felder sind einfach zu erstellen, aber eine schlecht geplante Feldarchitektur schafft Probleme, die später schwer zu beheben sind. Dies sind die Praktiken, die die Dinge sauber halten.
Verwenden Sie Auswahlfelder anstelle von Freitext, wann immer möglich
Wenn die Menge der möglichen Werte im Voraus bekannt ist, verwenden Sie immer ein Auswahlfeld anstelle eines Char-Feldes. Freitext führt zu inkonsistenten Einträgen ("Kunde", "kunde", "KUNDE", "Kl.") die Filter und Berichte brechen. Ein Dropdown-Menü erzwingt Konsistenz ohne zusätzliche Kosten.
Benennen Sie Felder klar und konsistent
Der technische Name (x_project_type) sollte den Inhalt widerspiegeln, nicht die Position im Formular. Ein Feld mit dem Namen x_field_1 ist sechs Monate später unmöglich zu warten. Verwenden Sie eine konsistente Namenskonvention und dokumentieren Sie, wofür jedes Feld gedacht ist.
Überdehnen Sie native Modelle nicht
Das Hinzufügen von zehn benutzerdefinierten Feldern zu sale.order ist normalerweise ein Zeichen dafür, dass ein benutzerdefiniertes Modell besser geeignet wäre. Wenn eine Gruppe von Feldern zusammengehört und eine neue Entität in Ihrem Unternehmen darstellt (ein Projekt, einen Vertrag, eine Zertifizierung), ziehen Sie in Betracht, ein benutzerdefiniertes Modell zu erstellen und es mit einem Many2one-Feld zu verknüpfen.
Testen Sie immer in einer Staging-Datenbank
Bevor Sie Felder zu einer Produktionsinstanz hinzufügen, testen Sie eine Kopie der Datenbank. Die Erstellung von Feldern ist größtenteils sicher, aber das Hinzufügen eines Feldes zum falschen Modell oder mit dem falschen Typ kann manuelle Bereinigungen erfordern. Eine Staging-Umgebung erkennt diese Probleme frühzeitig.
Dokumentieren Sie Ihre benutzerdefinierten Felder
Führen Sie ein Protokoll über jedes benutzerdefinierte Feld, das Sie hinzufügen: das Modell, den technischen Namen, den Zweck und wer es angefordert hat. Odoo-Implementierungen sammeln im Laufe der Zeit Felder, und ohne Dokumentation wird es unmöglich zu wissen, welche noch verwendet werden und welche entfernt werden können.
Verwenden Sie das richtige Werkzeug für berechnete Logik
Wenn der Wert eines Feldes von anderen Feldern abhängt, verwenden Sie ein berechnetes Feld, anstatt die Benutzer zu bitten, es manuell auszufüllen. Dies vermeidet Inkonsistenzen und reduziert Eingabefehler. Berechnete Felder sind Teil der Kernfunktionalität der Odoo Python-Felder und sind im offiziellen technischen Tutorial von Odoo gut dokumentiert.
Häufige Fallstricke
Selbst erfahrene Teams stoßen auf die gleichen Probleme mit benutzerdefinierten Feldern. Hier sind die häufigsten.
Das One2many beim Erstellen eines Many2one vergessen
Dies ist der häufigste technische Fehler. Wenn Sie ein Many2one-Feld im Modell A hinzufügen, das auf Modell B verweist, und Sie das entsprechende One2many-Feld im Modell B nicht erstellen, ist die Navigation von B nach A unterbrochen. Benutzer können die zugehörigen Datensätze auf der anderen Seite der Beziehung nicht sehen. Erstellen Sie immer beide Felder zusammen.
Ein Feld löschen, das Daten enthält
Das Löschen eines benutzerdefinierten Feldes entfernt dauerhaft die Datenbankspalte und alle darin enthaltenen Daten. Es gibt kein Rückgängig. Wenn es irgendeine Chance gibt, dass das Feld oder seine Daten in Zukunft benötigt werden, archivieren oder verstecken Sie das Feld, anstatt es zu löschen.
Felder direkt in der Produktion erstellen
Änderungen direkt an einer live Produktionsdatenbank vorzunehmen, ohne zuerst auf der Staging-Umgebung zu testen, ist ein Risiko, selbst bei einfachen Feldhinzufügungen. Wenn etwas mit der Ansichtskonfiguration schiefgeht, erhalten die Benutzer Fehler. Validieren Sie immer zuerst in einer Testumgebung.
Namenskonflikte mit Standardfeldern
Odoo wird einen Feldnamen ablehnen, der bereits im Modell existiert, aber es ist einfach, versehentlich ein Feld zu erstellen, das ein Feld aus einem später installierten Modul überschattet. Die Verwendung eines unternehmensspezifischen Präfixes (wie x_acme_) für Ihre benutzerdefinierten Felder verringert dieses Risiko erheblich.
Ein Feld zur Ansicht hinzufügen, ohne an die Benutzererfahrung zu denken
Nur weil ein Feld zu einem Formular hinzugefügt werden kann, bedeutet das nicht, dass es standardmäßig sichtbar sein sollte. Überladene Formulare verlangsamen die Benutzer. Wenn ein Feld nur in bestimmten Kontexten relevant ist, platzieren Sie es in einem separaten Tab oder machen Sie es bedingt sichtbar, indem Sie domänenbasierte Unsichtbarkeitsregeln verwenden.
Studio-Felder und technische Felder inkonsistent mischen
Wenn ein Projekt Studio-Anpassungen und codebasierte Anpassungen kombiniert, können Sie am Ende mit Feldern landen, die sich überschneidende Zwecke oder widersprüchliche Namen haben. Vereinbaren Sie zu Beginn des Projekts eine Strategie: Verwenden Sie entweder Studio für alle No-Code-Felder und Code für komplexe Logik oder verwenden Sie Code für alles. Das Mischen beider ohne einen klaren Plan führt zu Wartungsproblemen.
Fazit
Benutzerdefinierte Felder sind eine der einfachsten und wirkungsvollsten Möglichkeiten, Odoo an Ihr Unternehmen anzupassen. Sie erfordern keine Änderungen am Quellcode, integrieren sich nahtlos in den Rest der Plattform und bieten den Benutzern die genauen Datenerfassungen, die sie benötigen, ohne Umgehungen.
Der Schlüssel ist, vor dem Bauen zu planen. Wählen Sie den richtigen Feldtyp, benennen Sie die Dinge klar, respektieren Sie die Konventionen für relationale Felder und dokumentieren Sie, was Sie erstellen. Eine gut gestaltete Feldarchitektur macht Ihre Odoo-Instanz einfacher zu warten und einfacher weiterzuentwickeln, während Ihr Unternehmen wächst.
Egal, ob Sie Odoo Studio für schnelle No-Code-Felder verwenden oder Python-Module im Rahmen eines umfassenderen Odoo-Anpassungs-Projekts schreiben, die zugrunde liegenden Prinzipien sind die gleichen: Passen Sie das Feld an die Daten an, halten Sie das Modell sauber und testen Sie immer, bevor Sie in die Produktion gehen.
Bei Dasolo helfen wir Unternehmen, Odoo zu implementieren, anzupassen und zu optimieren, um ihren realen Arbeitsabläufen gerecht zu werden. Egal, ob Sie ein paar benutzerdefinierte Felder zu Ihrem bestehenden Setup hinzufügen oder ein vollständiges benutzerdefiniertes Modul von Grund auf neu erstellen müssen, unser Team ist hier, um zu helfen.
Kontaktieren Sie uns, wenn Sie Unterstützung bei Ihrer Odoo-Implementierung benötigen. Wir überprüfen gerne Ihr aktuelles Setup und schlagen den saubersten Weg nach vorne vor.