Einleitung
Das Char-Feld gehört zu den Basisbausteinen im Odoo-Datenmodell. Jedes Mal, wenn Sie einen Kontaktnamen, eine Artikelnummer oder eine kurze Notiz sehen, steckt oft ein Char-Feld dahinter — unscheinbar, aber omnipräsent.
Ob Sie als Power-User Formulare per Studio anpassen, als Entwickler Module schreiben oder als Berater eine Mandantenlösung aufbauen: Zu wissen, wie dieses Feld funktioniert, spart Zeit und verhindert Designfehler im Datenmodell.
Auf den ersten Blick wirkt es trivial, doch Char-Felder haben Eigenschaften und Verhaltensweisen, die man kennen sollte. Diese Anleitung erklärt, was das Feld speichert, wie es in der Oberfläche dargestellt wird, wie man es anlegt und anpasst und zeigt konkrete Einsatzfälle aus der Praxis.
Was ist das Char-Feld in Odoo?
Im Odoo-ORM ist das Char-Feld für kurze Textwerte konzipiert. In der Datenbank landet es je nach Definition als VARCHAR mit fester Maximallänge oder als TEXT-Spalte — also ideal für kompakte, einzeilige Inhalte.
Für Anwender erscheint ein Char-Feld als einzeiliges Texteingabefeld in Formularen und als einfache Textspalte in Listenansichten. Typische Einsatzzwecke sind Namen, Codes, Referenzen oder Identifikatoren, die auf einer Zeile Platz finden.
So definiert man es typischerweise in Python:
from odoo import fields, models
class SaleOrder(models.Model):
_inherit = 'sale.order'
customer_po_reference = fields.Char(
string='Customer PO Reference',
size=64,
index=True,
)
Das Argument string legt die Bezeichnung im UI fest. size begrenzt optional die Zeichenanzahl. index sorgt dafür, dass die Datenbank einen Index anlegt, was Suchvorgänge beschleunigt.
In Odoo Studio heißt das Feld in der Oberfläche ‚Text (einzeilig)‘. Studio vergibt bei manueller Erstellung automatisch ein Präfix x_studio_; bei Codedefinitionen wählen Sie selbst den technischen Namen.
Wie das Feld funktioniert
Definieren Sie ein Char-Feld im Modell, erstellt Odoo beim Installieren oder Aktualisieren des Moduls die dazugehörige Spalte in der Datenbank automatisch. Manuelle SQL-Migrationen sind dafür nicht nötig.
Ohne Größenvorgabe speichert PostgreSQL das Feld als TEXT, mit size als VARCHAR(n). Performance-technisch macht PostgreSQL hier kaum Unterschied — der Nutzen liegt vor allem in der Durchsetzung einer Längenbegrenzung.
Wichtige Eigenschaften des Feldes
Die folgenden Attribute sind bei Char-Feldern besonders relevant und bestimmen Verhalten, Sichtbarkeit und Nutzung im System:
- size: maximale Zeichenanzahl. Wird es weggelassen, gibt es auf Datenbankebene keine Längenbegrenzung.
- translate: Bei
Truekann der Feldwert sprachspezifisch abgelegt werden — wichtig für mehrsprachige Setups. - required: Macht das Feld in der Oberfläche und im Modell zwingend erforderlich.
- default: Legt einen Standardwert fest, der beim Anlegen neuer Datensätze gesetzt wird.
- index: Erzeugt einen Datenbankindex, der Filter- und Suchoperationen beschleunigt.
- compute: Verknüpft das Feld mit einer Python-Funktion zur dynamischen Berechnung, nützlich für zusammengesetzte Referenzen.
- store: Kombiniert mit
computesteuert es, ob der berechnete Wert in der Datenbank persistiert wird. - copy: Bestimmt, ob der Wert beim Duplizieren eines Datensatzes mitkopiert wird (Standard:
True).
Darstellung in Views
In Formularen zeigt sich ein Char-Feld als <input type="text">, in Listen als einfacher Text. In Suchansichten unterstützt es standardmäßig Operatoren wie ‚enthält‘, ‚gleich‘ und ‚beginnt mit‘.
Mittels Widgets lässt sich die Darstellung verändern: Das email-Widget macht aus einem Char-Feld einen klickbaren Mail-Link, das url-Widget öffnet Links im Browser — nützlich für bessere Bedienbarkeit.
Zusammenspiel mit dem Odoo-ORM
Für Entwickler ist Lesen und Schreiben eines Char-Feldes unproblematisch: Werte liegen auf dem Record-Objekt, das Framework übernimmt Validierung und einfache Sanitisation. Es gibt keine komplizierten Konvertierungen, weshalb Char-Felder so praktisch im Alltag sind.
Praxisbeispiele aus dem Business
Fünf typische Geschäftsanwendungen
CRM: Kundenreferenzen
Firmen vergeben interne Kundencodes, die auf dem Partner-Datensatz als Char-Feld gespeichert werden. Dadurch bleiben Kunden eindeutig auffindbar — gerade wenn ähnliche Namen auftreten — und die Codes erscheinen automatisch in Bestellungen und Rechnungen.
Vertrieb: Bestellreferenzen
PO-Nummern von Kunden müssen auf Lieferscheinen und Rechnungen auftauchen. Das native client_order_ref-Feld auf sale.order ist ein Char-Feld, das solche Referenzen konsistent weiterreicht und Rückfragen minimiert.
Lager: Interne Artikelreferenzen
Das Feld default_code auf product.template ist ein Char-Feld für interne Artikelnummern. Barcode-Scanner, Bestellungen und Lagerprozesse greifen darauf zu — saubere Werte sind hier essenziell für Datenqualität.
Buchhaltung: Steuer- und Registrierungsnummern
USt-IDs und Handelsregisternummern werden als Char-Felder auf Partnern gespeichert. Sind sie korrekt angelegt, erscheinen die Infos automatisch auf Rechnungen oder Lieferantenbelegen und ersparen manuelle Nacharbeiten.
HR: Mitarbeiter-IDs und Zugangscodes
Mitarbeiterkennnummern, Badge-Codes oder externe Payroll-IDs lassen sich als Char-Felder im Mitarbeiter-Modell speichern. Das schafft eine einfache Verknüpfung zu anderen Systemen ohne sofortige Komplettintegration.
Ein Char-Feld anlegen oder anpassen
Drei Wege, ein Char-Feld hinzuzufügen
Mit Odoo Studio (No-Code)
Studio ist das Low-Code-Werkzeug für schnelle Anpassungen. So fügen Sie ohne Programmieraufwand ein Char-Feld hinzu:
- Studio aus dem Hauptmenü öffnen.
- Das gewünschte Formular aufrufen.
- Ein Feld ‚Text (einzeilig)‘ aus der Seitenleiste in das Formular ziehen.
- Bezeichnung, Pflichtfeld-Status und optional die maximale Länge im Eigenschaften-Panel setzen.
- Studio speichern und schließen.
Studio legt das Feld automatisch mit dem Präfix x_studio_ an und fügt es dem Formular hinzu — keine manuellen DB-Migrationen nötig.
Per Python in einem Custom-Modul
Für kontrollierbare, versionierbare Anpassungen definieren Entwickler Felder im Python-Modell. Das ist der empfohlene Weg für produktive Deployments:
from odoo import fields, models
class ResPartner(models.Model):
_inherit = 'res.partner'
x_erp_customer_id = fields.Char(
string='ERP Customer ID',
size=32,
index=True,
copy=False,
)
Nach der Modelldefinition fügen Sie das Feld in die passende View-XML ein. Beim Installieren oder Aktualisieren des Moduls erzeugt Odoo automatisch die Datenbankspalte.
Über die XML-RPC API
Automatisierte Deployments oder Remote-Skripte können Felder programmatisch über die XML-RPC API anlegen:
field_id = models.execute_kw(
ODOO_DB, uid, ODOO_API_KEY,
'ir.model.fields', 'create',
[{
'name': 'x_custom_reference',
'field_description': 'Custom Reference',
'model_id': model_id,
'ttype': 'char',
'size': 64,
'state': 'manual',
}]
)
Der Parameter state: 'manual' markiert das Feld als manuell erstellt (nicht durch ein Modul) — die korrekte Einstellung für Studio- oder API-erstellte Felder. So lassen sich Felder auch automatisiert für Kundensysteme anlegen.
Empfohlene Vorgehensweisen
1. Größe festlegen, wenn das Limit klar ist
Für ISO-Codes, Telefonnummern oder feste Kennnummern sollten Sie size setzen. Das signalisiert Absicht und verhindert, dass Anwender versehentlich zu lange Werte eingeben — ein zweistelliger Ländercode braucht keine 500 Zeichen.
2. Index für häufige Suchfelder
Wenn ein Feld oft in Filtern oder Suchen genutzt wird (z. B. Kunden- oder Bestellcodes), aktivieren Sie index=True. Bei großen Tabellen spart das spürbar Ladezeit und verbessert die Nutzererfahrung.
3. Übersetzungen bei mehrsprachigen Inhalten
Wenn Nutzer in verschiedenen Sprachen unterschiedliche Feldwerte erwarten (Produktname, Stellenbezeichnung), setzen Sie translate=True. So erscheinen Inhalte sprachgerecht in PDFs und Formularen.
4. Klare technische Namen vergeben
Geben Sie Feldern sprechende technische Namen wie x_customer_erp_id. Unpräzise Namen erschweren Wartung. In Studio sollten Sie das Feld vor Deployment umbenennen, weil technische Namen später nur mit Aufwand änderbar sind.
5. Computed-Felder für abgeleitete Werte
Char-Felder lassen sich berechnen, etwa für eine Kombination aus Jahr und Sequenznummer. Mit store=True werden die Ergebnisse persistiert, sodass sie für Suchen, Berichte und Filter verfügbar sind, ohne bei jedem Zugriff neu berechnet zu werden.
Typische Fehlerquellen
Keine Längenbegrenzung = Risiko für schlechte Daten
Ohne size können Anwender ganze Absätze in ein Referenzfeld kopieren. Das führt später zu Problemen beim Druck oder bei Schnittstellen, die strikte Längenlimits erwarten. Definieren Sie eine sinnvolle Maximallänge, wenn sie relevant ist.
Fehlende Indizes bei oft gefilterten Feldern
Ohne Index wird die Datenbank bei Suchen große Tabellen scannen — das merkt man erst, wenn die Datenmenge wächst. Haben Benutzer Filter auf einem Char-Feld aktiv, sollten Sie von Anfang an einen Index setzen.
Char nicht mit Text verwechseln
Char ist für kurze, einzeilige Inhalte. Für Adressen, Beschreibungen oder längere Notizen ist das Text-Feld die richtige Wahl. Versuchen Sie nicht, mehrzeilige Inhalte in Char-Feldern unterzubringen — das führt zu schlechter Usability.
Übersetzen nicht vergessen bei mehrsprachigen Feldern
Ohne translate=True sehen alle Anwender denselben Wert — unabhängig von ihrer Sprache. Das kann bei kundenorientierten Dokumenten zu Missverständnissen führen.
Char nicht für begrenzte Auswahlwerte verwenden
Wenn ein Feld nur wenige zulässige Werte hat (Status, Kategorie, Land), verwenden Sie besser ein Selection- oder Many2one-Feld. Char-Felder fördern Inkonsistenzen durch Tippfehler und erschweren aussagekräftige Auswertungen.
FAQ
Was unterscheidet Char von Text in Odoo?
Char speichert kurze, einzeilige Texte und wird als Eingabefeld dargestellt. Text ist für längere, mehrzeilige Inhalte und wird als vergrößerbares Textarea gerendert. Nutzen Sie Char für Namen und Codes, Text für Beschreibungen und Notizen.
Kann ich die Zeichenanzahl in einem Char-Feld begrenzen?
Ja. In Python mit fields.Char(size=64) oder in Studio über die Feldeigenschaften. Ohne Angabe gibt es auf Datenbankebene keine Begrenzung.
Wie mache ich ein Char-Feld über die Suche auffindbar?
Fügen Sie es der Suchansicht des Modells hinzu. In Studio aktivieren Sie die Suchoption in den Feldeigenschaften. Im Code fügen Sie <field name="your_char_field"/> innerhalb der <search>-Definition ein. Danach kann das Feld direkt in der Suchleiste genutzt werden.
Kann ich Zahlen in einem Char-Feld speichern?
Technisch ja, aber nicht empfohlen für numerische Berechnungen. Für Mengen oder Beträge nutzen Sie Integer/Float. Char eignet sich für Nummern, die als Text behandelt werden (Postleitzahlen, Telefonnummern, IBANs, Seriennummern).
Wie erstelle ich ein berechnetes Char-Feld, das gespeichert wird?
Definieren Sie das Feld mit compute='_compute_my_field' und store=True. Implementieren Sie die Berechnungsmethode mit @api.depends(), damit Odoo weiß, wann neu gerechnet werden muss. Mit store=True ist der Wert in Suchsichten und Exporten verfügbar, ohne bei jedem Zugriff neu zu berechnen.
Fazit
Das Char-Feld ist auf den ersten Blick unspektakulär, wird aber täglich dutzendfach verwendet. Wer beim Aufbau von Odoo-Strukturen aufmerksam mit Feldtypen umgeht, erzielt deutlich robustere Daten und weniger Nacharbeit.
Ob Sie Felder in Studio anlegen, per Python-Modul definieren oder per API automatisieren — die hier beschriebenen Muster helfen, von Anfang an sauber zu modellieren und spätere Probleme zu vermeiden.
Ein durchdachtes Datenmodell mit den passenden Feldtypen ist eine wesentliche Grundlage für erfolgreiche Odoo-Projekte. Das Char-Feld ist nur ein kleiner Baustein — aber einer, den es lohnt, richtig zu beherrschen.
Bei Dasolo unterstützen wir Unternehmen beim Implementieren, Anpassen und Optimieren von Odoo in allen Bereichen. Ob Datenmodell-Design, fachliche Felder oder komplette Modulentwicklung — wir begleiten Sie gerne. Kontaktieren Sie uns und sprechen Sie mit uns über Ihr Odoo-Projekt.