Inleiding
Het Char-veld is een van de meest fundamentele veldtypes in het Odoo-datamodel. Als je ooit naar een contactnaam, een productreferentie of een opmerking bij een verkooporder hebt gekeken, heb je interactie gehad met een Char-veld zonder het noodzakelijkerwijs te weten.
Begrijpen hoe dit veldtype werkt is belangrijk, of je nu een zakelijke gebruiker bent die formulieren configureert in Odoo Studio, een ontwikkelaar die aangepaste modules schrijft, of een consultant die een klant helpt bij het ontwerpen van hun Odoo-omgeving.
Het lijkt eenvoudig aan de oppervlakte, maar er zijn verschillende eigenschappen en gedragingen die het waard zijn om te weten om het goed te gebruiken en veelvoorkomende fouten te vermijden. Deze gids loopt alles door, van wat het veld opslaat en hoe het zich gedraagt in de interface, tot het maken en aanpassen ervan, samen met echte zakelijke gebruikscases.
Wat is het Char-veld in Odoo
In de Odoo ORM is het Char-veld ontworpen om korte tekststrings op te slaan. Het komt overeen met een VARCHAR of TEXT kolom in PostgreSQL, afhankelijk van of je een limiet voor de grootte definieert.
Vanuit het perspectief van de gebruiker verschijnt een Char-veld als een tekstinvoer op één regel in formulieren en als een platte tekstkolom in lijstweergaven. Het is de standaardkeuze voor het opslaan van namen, codes, referenties, identificatoren en elk ander kort stuk tekst dat op één regel past.
Hier is hoe het eruit ziet in een Python-modeldefinitie:
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,
)
De string parameter stelt het label in dat in de interface wordt weergegeven. De size parameter, die optioneel is, beperkt het aantal tekens. De index parameter creëert een database-index voor snellere zoekopdrachten.
In Odoo Studio wordt ditzelfde veld een Text veld (enkele regel) genoemd. Wanneer het via Studio wordt aangemaakt, krijgt het automatisch een x_studio_ prefix. Wanneer het via code of de XML-RPC API wordt aangemaakt, kies je zelf de technische naam.
Hoe het veld werkt
Wanneer je een Char-veld in Odoo definieert, zorgt het framework automatisch voor de kolomcreatie in de database tijdens de installatie of upgrade van de module. Het is niet nodig om SQL-migraties handmatig te schrijven.
In de database worden Char-velden zonder een groottebeperking opgeslagen als TEXT. Degenen met een size parameter gebruiken VARCHAR(n). PostgreSQL behandelt beide typen efficiënt, dus het verschil gaat vooral over het afdwingen van een lengtebeperking in plaats van een groot prestatieverschil.
Belangrijke veldattributen
Hier zijn de belangrijkste eigenschappen van een Char-veld in het Odoo-framework:
- size: Maximale aantal tekens. Laat dit weg en er is geen lengtebeperking op database-niveau.
- translate: Wanneer ingesteld op
True, kan de veldwaarde per taal worden vertaald. Handig in meertalige implementaties. - vereist: Maakt het veld verplicht in de interface en op het modelniveau.
- standaard: Stelt een automatische standaardwaarde in wanneer nieuwe records worden aangemaakt.
- index: Creëert een database-index voor snellere filtering en zoeken op dat veld.
- berekenen: Koppelt een Python-methode die de veldwaarde dynamisch berekent, nuttig voor afgeleide of samengevoegde waarden.
- opslag: Wanneer gecombineerd met
berekenen, bepaalt of de berekende waarde in de database wordt opgeslagen. - kopiëren: Bepaalt of de veldwaarde wordt gekopieerd bij het dupliceren van een record. Standaard is
Waar.
Hoe het verschijnt in weergaven
In formulierweergaven wordt een Char-veld weergegeven als een standaard <input type="text"> element. In lijstweergaven wordt het weergegeven als platte tekst. In zoekweergaven ondersteunt het filters met behulp van bevat, gelijk aan en begint-met operatoren direct.
Je kunt ook een Char-veld combineren met widgets in de weergave om te veranderen hoe het verschijnt. Bijvoorbeeld, de email widget verandert een Char-veld in een klikbare e-maillink, en de url widget zorgt ervoor dat het opent in een nieuw browsertabblad.
Interactie met de Odoo ORM
Vanuit een ontwikkelaarsperspectief werkt het lezen en schrijven van Char-velden zoals elk ander veld in de Odoo ORM. Je krijgt de waarde rechtstreeks op het recordobject, en het framework zorgt voor sanitatie en validatie op basis van de velddefinitie. Er zijn geen complexe transformaties betrokken, wat deel uitmaakt van wat het Char-veld zo praktisch maakt voor dagelijks gebruik in Odoo-ontwikkeling.
Zakelijke gebruikscases
Het Char-veld verschijnt in bijna elke hoek van een Odoo-implementatie. Hier zijn vijf voorbeelden uit de praktijk van veelvoorkomende bedrijfsworkflows.
CRM: Klantreferentienummers
Veel bedrijven wijzen interne referentienummers toe aan hun klanten. Een Char-veld op het res.partner model kan deze code opslaan, waardoor het doorzoekbaar is vanuit de klantenlijst en zichtbaar op verkooporders en facturen. Verkoopteams kunnen snel het juiste account oproepen zonder verwarring wanneer meerdere klanten vergelijkbare namen delen.
Verkoop: Inkoopordereferenties
Wanneer klanten inkooporders sturen, voegen ze een PO-nummer toe dat op facturen en leveringsdocumenten moet verschijnen. Het native client_order_ref veld op sale.order is een Char-veld. Het stroomt automatisch door naar de factuur, waardoor heen-en-weer communicatie met de klant over ontbrekende referenties wordt verminderd.
Voorraad: Interne productreferenties
Het default_code veld op product.template is een native Char-veld in Odoo. Het slaat de interne referentie op die in de verschillende magazijnen, barcode-scanners en inkooporders wordt gebruikt. Dit veld schoon en consistent houden is een van de meest voorkomende prioriteiten voor datakwaliteit in voorraadimplementaties.
Boekhouding: Belasting- en registratienummers
BTW-nummers, belasting-ID's en bedrijfsregistratienummers worden opgeslagen als Char-velden op partnerrecords. Deze waarden verschijnen automatisch op klantfacturen en leveranciersfacturen wanneer ze correct zijn geconfigureerd. Voor bedrijven die in meerdere landen opereren, bespaart het betrouwbaar opslaan van deze gegevens op één plek veel handmatig correctiewerk.
HR: Werknemersidentificatoren en badgecodes
HR-teams moeten vaak werknemers-ID-nummers, badgecodes of identificatoren van externe loon- of toegangscontrolesystemen opslaan. Een Char-veld op het werknemersmodel maakt het gemakkelijk om Odoo-records te koppelen aan andere zakelijke tools zonder dat er vanaf dag één een volledige integratie nodig is.
Een Char-veld maken of aanpassen
Er zijn drie hoofdmethoden om een Char-veld aan een Odoo-model toe te voegen, afhankelijk van je technische setup en implementatieaanpak.
Gebruik Odoo Studio (Geen Code)
Odoo Studio is de ingebouwde low-code aanpassingstool. Om een Char-veld toe te voegen zonder enige code te schrijven:
- Open Odoo Studio vanuit het hoofdmenu.
- Navigeer naar het formulier waar je het veld wilt.
- Sleep een Tekst veld (enkele regel) vanuit de zijbalk naar het formulier.
- Stel het label, de vereiste status en optioneel een groottebeperking in het veld eigenschappenpaneel in.
- Sla op en sluit Studio.
Studio maakt automatisch het veld aan met een x_studio_ prefix en voegt het toe aan de formulierweergave. Geen database-migratie is nodig aan jouw kant.
Gebruik van Python in een Aangepaste Module
Voor ontwikkelaars die Odoo-modules bouwen, worden Char-velden gedefinieerd in Python-modelbestanden. Dit is de aanbevolen aanpak voor elke aanpassing die versiebeheer nodig heeft en over meerdere omgevingen moet worden uitgerold:
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,
)
Nadat je het veld aan het model hebt toegevoegd, moet je het ook toevoegen aan het relevante weergave-XML-bestand, zodat het in de interface verschijnt. Odoo beheert de creatie van de databasekolom wanneer je de module installeert of bijwerkt.
Gebruik van de XML-RPC API
Als je Odoo-aanpassingen programmatisch beheert, bijvoorbeeld als onderdeel van een implementatiepipeline of een notebook voor externe configuratie, kun je Char-velden aanmaken via de XML-RPC API:
field_id = models.execute_kw(
ODOO_DB, uid, ODOO_API_KEY,
'ir.model.fields', 'create',
[{
'name': 'x_custom_reference',
'field_description': 'Aangepaste Referentie',
'model_id': model_id,
'ttype': 'char',
'size': 64,
'state': 'manual',
}]
)
De state: manual waarde vertelt Odoo dat dit veld handmatig is aangemaakt (niet door een module), wat de juiste instelling is voor velden die zijn aangemaakt via Studio of de API. Dit is hoe Dasolo de externe veldcreatie voor klanten beheert als onderdeel van geautomatiseerde configuratiescripts.
Beste praktijken
1. Stel een grootte in wanneer je de maximale lengte kent
Als het veld ISO-landcodes, telefoonnummers of vaste identificatoren opslaat, definieer dan een size. Dit communiceert de intentie aan iedereen die het model leest en voorkomt onopzettelijke invoerfouten. Een veld dat bedoeld is om een tweecijferige landcode op te slaan, zou niet stilletjes een string van 500 tekens moeten accepteren.
2. Voeg een index toe voor velden die je vaak doorzoekt
Als gebruikers regelmatig records filteren of zoeken op een Char-veld, zoals een klantcode of orderreferentie, stel dan index=True in. Op tabellen met tienduizenden records kan dit het verschil maken tussen een zoekopdracht van één seconde en een wachttijd van tien seconden.
3. Gebruik translate=True voor meertalige inhoud
Als je Odoo-instantie gebruikers in meerdere talen bedient en een veld tekst bevat die per taal varieert, schakel dan vertaling in. Dit is belangrijk voor productnamen, functietitels of elk veld waarvan de waarde gebruikers in verschillende regio's in hun eigen taal zouden verwachten.
4. Geef velden duidelijke en consistente technische namen
In aangepaste modules, noem velden beschrijvend. Een veld genaamd x_customer_erp_id is veel beter onderhoudbaar dan x_field1. Als je Studio gebruikt, hernoem het veld in het eigenschappenpaneel voordat je het implementeert. Technische namen kunnen niet gemakkelijk later worden gewijzigd zodra gegevens zijn opgeslagen.
5. Gebruik compute voor afgeleide referenties
Char-velden kunnen dynamisch worden berekend. Bijvoorbeeld, een referentie die een jaar en een volgnummer combineert, kan worden opgebouwd als een berekend Char-veld. Met store=True wordt de waarde opgeslagen in de database en kan deze worden gebruikt in zoekfilters en rapporten, terwijl de berekeningslogica gecentraliseerd blijft in één methode.
Veelvoorkomende valkuilen
Geen limiet op de grootte laat de deur open voor slechte data
Zonder een groottebeperking kunnen gebruikers hele paragrafen in een referentieveld plakken. Dit is een echt probleem wanneer de waarde later op gedrukte documenten verschijnt of naar externe systemen wordt gestuurd met strikte tekenlimieten. Definieer altijd een redelijke grootte voor velden waar de lengte belangrijk is.
Ontbrekende indexen op vaak doorzochte velden
Zonder index is filteren op een Char-veld in een grote tabel een volledige tabelscan. Veel teams ontdekken dit probleem pas nadat hun database een aanzienlijke grootte heeft bereikt. Als een veld regelmatig wordt gebruikt in lijstweergavefilters of zoekbalken, voeg dan vanaf het begin de index toe.
Char verwarren met Text-veld
Het Char-veld is voor korte tekst op één regel. Het Text-veld is voor langere inhoud over meerdere regels. Het gebruik van een Char-veld voor adressen, notities of beschrijvingen leidt tot een slechte gebruikerservaring, aangezien de invoer niet zal worden gewrapt of regelafbrekingen zal toestaan. Als de inhoud realistisch gezien meerdere zinnen kan beslaan, gebruik dan in plaats daarvan een Text-veld.
Vergeten te vertalen op meertalige velden
In bedrijven die in meerdere landen opereren, betekent het missen van de translate=True optie op een gebruikersgericht veld dat alle taalgebruikers dezelfde waarde zien. Dit kan verwarring veroorzaken op klantgerichte documenten waar de inhoud van het veld moet aanpassen aan de documenttaal.
Char gebruiken voor data die een Selectie of relatie zou moeten zijn
Als een veld altijd één van een beperkte set waarden bevat, zoals een categorie, een status of een land, moet het een Selectieveld of een Many2one-relatie zijn, geen Char-veld. Het gebruik van Char hiervoor creëert inconsistente waarden tussen records en maakt filteren en rapporteren onbetrouwbaar. Vrije tekstvelden nodigen uit tot typfouten en variaties die groepering en analyse verstoren.
FAQ
Wat is het verschil tussen een Char-veld en een Text-veld in Odoo?
Een Char-veld slaat korte enkele regels tekst op en wordt weergegeven als een tekstinvoer in formulieren. Een Text-veld slaat langere meerregelige inhoud op en wordt weergegeven als een aanpasbare textarea. Gebruik Char voor namen, codes en referenties. Gebruik Text voor beschrijvingen, notities en alles wat gebruikers in meerdere zinnen willen schrijven.
Kan ik het aantal opgeslagen tekens in een Char-veld beperken?
Ja. Gebruik de size parameter bij het definiëren van het veld in Python, bijvoorbeeld fields.Char(size=64). In Odoo Studio kun je deze limiet instellen in het eigenschappenpaneel van het veld. Als er geen grootte is ingesteld, heeft het veld geen afgedwongen lengtebeperking op het database-niveau.
Hoe laat ik een Char-veld verschijnen in de zoekbalk?
Voeg het veld toe aan de zoekweergave van het model. In Studio, schakel de zoekoptie in de veld eigenschappen in. In code, voeg <field name="your_char_field"/> toe binnen de <search> weergave definitie in je XML. Eenmaal toegevoegd, kunnen gebruikers records filteren op dat veld rechtstreeks vanuit de zoekbalk.
Kan ik cijfers opslaan in een Char-veld?
Technisch gezien ja, maar het wordt niet aanbevolen voor waarden die berekeningen of numerieke vergelijkingen vereisen. Gebruik Integer of Float-velden voor hoeveelheden en bedragen. Char is geschikt voor strings die toevallig cijfers bevatten, zoals postcodes, telefoonnummers, IBAN-nummers of serienummers, waarbij de waarde als tekst in plaats van als een getal wordt behandeld.
Hoe maak ik een berekend Char-veld dat ook zijn waarde opslaat?
Definieer het veld met compute='_compute_my_field' en store=True. Schrijf de compute-methode met @api.depends() om aan te geven welke andere velden de herberekening triggeren. Met store=True slaat Odoo de berekende waarde op in de database, waardoor deze beschikbaar is in zoekopdrachten, filters en exports zonder opnieuw te berekenen bij elke lezing.
Conclusie
Het Char-veld is bedrieglijk eenvoudig. De meeste mensen hebben er elke dag tientallen in Odoo zonder erover na te denken. Maar wanneer je een Odoo-systeem bouwt of aanpast, maakt het begrijpen van de eigenschappen, het databasegedrag en wanneer je het moet gebruiken in vergelijking met andere veldtypes een echt verschil in de kwaliteit van je datamodel.
Of je nu een klantreferentie toevoegt via Odoo Studio, een veld definieert in een aangepaste Python-module, of velden programmatically via de API maakt, de patronen die in deze gids worden beschreven, helpen je om het de eerste keer goed te doen.
Een goed ontworpen datamodel dat is gebaseerd op de juiste veldtypes is een van de belangrijkste fundamenten van een succesvolle Odoo-implementatie. Het Char-veld is een klein onderdeel van die puzzel, maar het is er een die het waard is om goed te begrijpen.
Bij Dasolo helpen we bedrijven met het implementeren, aanpassen en optimaliseren van Odoo in alle afdelingen. Of je nu hulp nodig hebt bij het ontwerpen van een schoon datamodel, het toevoegen van aangepaste velden aan je workflows, of het bouwen van een volledige Odoo-module vanaf nul, ons team staat voor je klaar. Neem contact met ons op en laten we praten over jouw Odoo-project.