Readonly-velden zijn een van die functies in Odoo die in eerste instantie eenvoudig lijken, maar een veel grotere rol spelen dan de meeste gebruikers verwachten.
Of je nu een zakelijke gebruiker bent die zich afvraagt waarom bepaalde velden grijs zijn, of een ontwikkelaar die het gedrag van velden in je Odoo-aanpassing wil beheersen, deze gids behandelt alles wat je moet weten.
Begrijpen hoe readonly-velden werken is de sleutel tot het bouwen van betrouwbare workflows, het beschermen van gegevensintegriteit en het leveren van een soepelere ervaring voor je team.
Deze Odoo-veld tutorial behandelt zowel de zakelijke als technische aspecten van readonly, dus of je nu Odoo configureert of er bovenop bouwt, je vindt hier wat je nodig hebt.
Wat is het Readonly-veld in Odoo
Een readonly-veld in Odoo is een veld dat een waarde weergeeft maar niet rechtstreeks door de gebruiker via de interface kan worden bewerkt. De gegevens zijn zichtbaar, maar de invoer is vergrendeld.
In de formulierweergave verschijnen alleen-lezen velden meestal als platte tekst in plaats van interactieve invoervelden. Afhankelijk van het Odoo-thema kunnen ze er iets vervaagd of gewoon vlak uitzien in vergelijking met bewerkbare velden.
Binnen het Odoo-datamodel kan het alleen-lezen gedrag op twee verschillende niveaus worden toegepast:
- Op het veldniveau (Python/ORM): het veld is altijd alleen-lezen in alle weergaven en contexten
- Op het weergaveniveau (XML): het veld is alleen-lezen in een specifieke weergave of onder specifieke voorwaarden
Deze onderscheiding is belangrijk. Een veld dat als alleen-lezen is gemarkeerd op het ORM-niveau kan niet worden bewerkt via enige gebruikersinterface. Een veld dat alleen-lezen is gemarkeerd op het weergaveniveau is beschermd in die specifieke context, maar kan nog steeds schrijfbaar zijn in andere weergaven of via server-side code.
Alleen-lezen is op zich geen veldtype. Het is een attribuut dat kan worden toegepast op elk van de standaard Odoo-veldtypes: Char, Integer, Float, Many2one, Date, en anderen. Dit is een kernonderdeel van het Odoo-framework voor het beheersen van hoe velden zich gedragen tijdens runtime.
Hoe het Readonly-veld werkt
Om te begrijpen hoe alleen-lezen velden zich gedragen, is het nuttig om naar beide kanten te kijken: de Odoo ORM (Python) en de weergave-laag (XML).
Alleen-lezen op het ORM-niveau
In de Odoo ORM kan een veld als permanent alleen-lezen worden verklaard direct in het Python-model. Dit is het meest gebruikelijk voor berekende velden die hun waarde afleiden van andere gegevens. De velddefinitie bevat readonly=True als parameter, en Odoo zal de gebruiker nooit toestaan om het via de UI te bewerken.
Dit niveau van alleen-lezen maakt deel uit van de Odoo Python-velden API en is gedocumenteerd in de officiële Odoo-ontwikkelaarsgids. Het is wereldwijd van toepassing, ongeacht welke weergave wordt gebruikt.
Staat-gebaseerd alleen-lezen
Een van de meest voorkomende patronen in Odoo-ontwikkeling is het alleen-lezen maken van een veld op basis van de huidige staat van een document. Dit is hoe standaardmodules zoals Verkoop, Aankopen en Boekhouding hun gegevens vergrendelen zodra een document de conceptfase voorbij is.
In Odoo 16 en eerdere versies werd dit gedaan met behulp van de attrs eigenschap in de view XML, waarbij een domeinvoorwaarde werd gecombineerd met het veldelement. In Odoo 17 en latere versies is de syntaxis beknopter en wordt deze rechtstreeks als een inline-expressie op het veldelement geschreven.
Beide benaderingen bereiken hetzelfde resultaat: het veld is bewerkbaar terwijl het document in concept is, en wordt vergrendeld zodra het door de workflow vordert. Dit is een fundamenteel concept in elke Odoo technische tutorial die veldconfiguratie behandelt.
Gecalculeerde Velden en Alleen-lezen
Odoo gecalculeerde velden zijn standaard alleen-lezen. Wanneer je een veld definieert met een compute methode, gaat Odoo ervan uit dat het niet rechtstreeks bewerkt moet worden omdat de waarde automatisch is afgeleid van andere velden.
Als je wilt dat een gecalculeerd veld ook wordt opgeslagen, stel je zowel de compute parameter als store=True in. Deze opgeslagen Odoo-databasevelden zijn een veelvoorkomend patroon voor prestatieoptimalisatie, aangezien ze kunnen worden gebruikt in zoekfilters en efficiënt op database-niveau kunnen worden gesorteerd zonder waarden on-the-fly opnieuw te berekenen.
Een Gecalculeerd Veld Bewerkbaar Maken
Als je wilt dat een gecalculeerd veld ook handmatige invoer accepteert, kun je een inverse methode naast het veld definiëren. De inverse methode vertelt Odoo wat te doen wanneer een gebruiker een waarde in het gecalculeerde veld schrijft. Zonder een inverse blijft het veld standaard alleen-lezen. Dit maakt deel uit van de meer geavanceerde Odoo ORM veldtypes API en wordt uitvoerig behandeld in de Odoo ontwikkelaarsgids.
Zakelijke gebruiksscenario's
Alleen-lezen velden komen in elk Odoo-module voor. Hier zijn vijf praktische voorbeelden uit echte bedrijfsworkflows.
1. CRM: Vergrendelen van Gewonnen en Verloren Kansen Data
In de CRM-module zijn de verwachte omzet en sluitingsdatum bewerkbaar terwijl er aan een lead wordt gewerkt. Zodra een kans als Gewonnen of Verloren wordt gemarkeerd, worden deze velden ingesteld op alleen-lezen om een nauwkeurige registratie te behouden van wat er is afgesloten en tegen welke waarde.
Dit voorkomt dat iemand achteraf cijfers kan aanpassen, wat de verkooprapporten en pipeline-analyses zou vervormen.
2. Verkoop: Beveiligen van Bevestigde Orderregels
Wanneer een verkooporder van Concept naar Bevestigd gaat, worden de orderregels alleen-lezen. Gebruikers kunnen het product, de hoeveelheid of de prijs niet meer wijzigen nadat de klant een bevestiging heeft ontvangen.
Als wijzigingen echt nodig zijn, moet de order expliciet worden teruggezet naar concept, wat een audittrail creëert en de correctie opzettelijk maakt in plaats van per ongeluk.
3. Voorraad: Gevalideerde Voorraadbeweging Hoeveelheden
In magazijnoperaties, zodra een levering of ontvangst is gevalideerd, worden de uitgevoerde hoeveelheden vergrendeld. Dit beschermt de integriteit van de voorraadwaardering en zorgt ervoor dat de records overeenkomen met wat fysiek door het magazijn is verplaatst.
Bewerkbare hoeveelheden na validatie zouden stilletjes de voorraadniveaus over meerdere locaties kunnen corrumperen.
4. Boekhouding: Geplaatste Journaalpostregels
In de boekhouding, zodra een journaalpost is geplaatst, worden al zijn regels alleen-lezen. Dit is zowel een wettelijke vereiste in veel landen als een kernprincipe van dubbel boekhouden.
Bewerkingen na plaatsing zouden de betrouwbaarheid van financiële overzichten in gevaar brengen en ernstige nalevingsrisico's creëren.
5. Productie: Voltooide Werkordergegevens
In de Productiemodule, zodra een werkorder als voltooid is gemarkeerd, worden de werkelijke duur en geproduceerde hoeveelheden ingesteld op alleen-lezen. Dit behoudt nauwkeurige productiegegevens die bijdragen aan kostenanalyse en prestatiebewaking.
Een Readonly-veld maken of aanpassen
Er zijn twee hoofdwegen om alleen-lezen velden in Odoo te configureren: het gebruik van Odoo Studio voor een no-code benadering, of het rechtstreeks schrijven van Python en XML voor volledige technische controle.
Odoo Studio gebruiken
Odoo Studio-velden maken het eenvoudig om readonly-gedrag toe te voegen of te wijzigen zonder enige code te schrijven. Om een veld als readonly te configureren met Studio:
- Open Odoo Studio vanuit het hoofdmenu (het potloodpictogram)
- Navigeer naar de formulierweergave waar je het veld wilt configureren
- Klik op het veld dat je wilt wijzigen
- Schakel in het eigenschappenpaneel aan de rechterkant de optie "Readonly" in
- Sla op en sluit Studio
Studio stelt je ook in staat om voorwaardelijk readonly gedrag in te stellen met behulp van domeinexpressies. Je kunt bijvoorbeeld een veld readonly maken alleen wanneer een statusveld gelijk is aan een specifieke waarde, zonder een enkele regel code te schrijven.
De aanpak van het creëren van velden in Odoo Studio is de juiste keuze voor consultants en beheerders die snel en veilig datarichtlijnen moeten afdwingen. Wijzigingen die via Studio worden aangebracht, worden in de database opgeslagen en zullen niet worden overschreven door module-upgrades.
Gebruik van Python voor technische aanpassing
Voor ontwikkelaars die aangepaste Odoo-modules bouwen, wordt het readonly-attribuut rechtstreeks op de velddefinitie in het Python-model ingesteld. Dit is standaardgebruik van Odoo Python-velden en wordt behandeld in elke Odoo-ontwikkelaarsgids.
Je kunt readonly=True instellen als een statische parameter op elk veldtype, waardoor het permanent niet-bewerkbaar is. Voor meer flexibele controle stelt de states-parameter je in staat om te definiëren in welke documenttoestanden het veld bewerkbaar versus readonly moet zijn.
Deze aanpak is bijzonder nuttig wanneer je aangepaste velden toevoegt aan bestaande Odoo-modellen als onderdeel van een Odoo-aanpassingsproject. Het houdt de veldlogica dicht bij het datamodel in plaats van verspreid over meerdere weergavebestanden.
Gebruik van XML-weergave-attributen
Voor weergave-niveau alleen-lezen gedrag voegt u het readonly attribuut rechtstreeks toe aan het veld-element in uw weergave-XML. Dit maakt deel uit van de standaard Odoo ontwikkelingsworkflow voor elke technische aanpassing.
Het voordeel van alleen-lezen op weergaveniveau is flexibiliteit: hetzelfde veld kan zich anders gedragen in verschillende weergaven, of onder verschillende omstandigheden, zonder de onderliggende velddefinitie te wijzigen. Dit is vaak de voorkeur wanneer u beperkingen wilt toevoegen aan bestaande standaardvelden zonder hun Python-definitie te wijzigen.
In Odoo 17 is de inline expressiesyntaxis voor alleen-lezen voorwaarden schoner en leesbaarder dan de oudere attrs dictionary syntaxis die in eerdere versies werd gebruikt. Beide benaderingen zijn geldig, afhankelijk van welke Odoo-versie u gebruikt.
Beste praktijken
Het goed gebruiken van alleen-lezen velden komt neer op het toepassen ervan op het juiste niveau, om de juiste reden. Hier zijn de belangrijkste richtlijnen vanuit een Odoo-consulting perspectief.
1. Geef de voorkeur aan alleen-lezen op weergaveniveau wanneer de context varieert
Als een veld alleen-lezen moet zijn in bepaalde documenttoestanden of in specifieke weergaven, pas dan de alleen-lezen instelling toe op weergaveniveau in plaats van op modelniveau. Dit houdt uw Odoo-datamodel flexibel en stelt backendprocessen of API-integraties in staat om indien nodig nog steeds naar het veld te schrijven.
2. Stem alleen-lezen voorwaarden af op de documentlevenscyclus
Uw alleen-lezen voorwaarden moeten overeenkomen met de natuurlijke stroom van uw documenten. Velden moeten vergrendeld worden wanneer het document een staat bereikt waarin verdere bewerkingen problemen zouden veroorzaken. Dit creëert een voorspelbare en intuïtieve ervaring voor gebruikers, wat een van de kenmerken is van een goed geïmplementeerde Odoo-aanpassing.
3. Testen over gebruikersrollen heen
Alleen-lezen gedrag kan op onverwachte manieren interageren met toegangsrechten. Test altijd uw configuratie zowel als een standaardgebruiker als een administrator om te verifiëren dat het veld correct functioneert voor elke rol. Wat alleen-lezen lijkt voor de ene gebruikersgroep, kan nog steeds bewerkbaar zijn voor een andere, afhankelijk van hun profiel.
4. Combineer alleen-lezen met verplicht waar het logisch is
In multi-stage forms, een veld kan vereist zijn in het concept maar alleen-lezen in latere staten. Je kunt beide attributen combineren in je view XML om dit patroon op een nette manier af te dwingen. Dit is gebruikelijk voor velden zoals leverdata of referentienummers die ingevuld moeten worden voordat een document wordt bevestigd.
5. Documenteer je Alleen-Lezen Logica
Bij aangepaste Odoo-ontwikkeling, vooral bij complexe datamodellen, voeg altijd een opmerking toe die uitlegt waarom een veld alleen-lezen is. Toekomstige ontwikkelaars die de code onderhouden, moeten de zakelijke reden achter de beperking begrijpen, niet alleen de technische implementatie.
6. Gebruik Studio Velden voor Snelle, Upgrade-Veilige Wijzigingen
Voor eenvoudige gebruiksscenario's bieden Odoo Studio-velden een snelle en upgrade-veilige manier om alleen-lezen gedrag toe te voegen. Reserveer Python-aanpassingen voor gevallen waarin Studio de vereiste logica niet kan leveren, zoals complexe kruisveldvoorwaarden of integratie met aangepaste berekende velden.
Veelvoorkomende valkuilen
Zelfs ervaren Odoo-gebruikers en ontwikkelaars lopen tegen dezelfde problemen aan met alleen-lezen velden. Hier zijn de punten die het waard zijn om te weten voordat ze je verrassen.
Verwarring tussen View-Level Alleen-Lezen en een Beveiligingsgrens
Een veld dat als alleen-lezen is ingesteld in een view voorkomt geen updates via de XML-RPC API, ORM schrijfoproepen in Python, of serveracties. View-level alleen-lezen is een UI-beperking, geen beveiligingscontrole. Als je echt alle schrijfacties naar een veld wilt voorkomen, moet je dat afdwingen op het ORM-niveau of via toegangscontroleregels, niet alleen in de view.
Velden Permanent Alleen-Lezen Maken Wanneer Voorwaardelijk Beter Zou Zijn
Het is verleidelijk om een veld volledig te vergrendelen wanneer je het wilt beschermen. Maar als gebruikers het legitiem moeten kunnen bewerken in bepaalde situaties, zoals wanneer een document naar concept wordt teruggezet, zal een permanente alleen-lezen instelling op ORM-niveau hen volledig blokkeren, inclusief eventuele correctieworkflows. Denk altijd goed na over de volledige levenscyclus voordat je kiest voor permanent boven voorwaardelijk.
Vergeten Over Onchange Methoden
Als een alleen-lezen veld ook wordt genoemd in een onchange methode, kan die methode nog steeds proberen er een waarde aan toe te wijzen. Dit kan verwarrend gedrag opleveren waarbij het veld lijkt te worden bijgewerkt tijdens de interactie van de gebruiker, maar vervolgens terugkeert of een fout veroorzaakt. Zorg ervoor dat je onchange-logica rekening houdt met alleen-lezen velden.
Niet Consistent Toepassen van Readonly Over Alle Weergaven
Een veld dat als readonly is gemarkeerd in de formulierweergave kan nog steeds bewerkbaar zijn in de lijstweergave of kanbanweergave als die weergaven dezelfde beperking niet bevatten. Controleer altijd of uw readonly-configuratie consistent is toegepast in elke weergave waar het veld verschijnt.
Bijwerkingen Bij Het Erven van Standaardmodellen
Wanneer u erft van een standaard Odoo-model en readonly=True toevoegt aan een bestaand veld, heeft deze wijziging invloed op alle weergaven die dat veld tonen, inclusief standaardweergaven. Zorg ervoor dat dit opzettelijk is en dat het de standaard Odoo-gedragingen niet verstoort of in conflict komt met andere aanpassingen op hetzelfde model.
Conclusie
Readonly-velden zijn een fundamenteel hulpmiddel in Odoo om gebruikers door workflows te begeleiden, de integriteit van gegevens te beschermen en bedrijfsregels af te dwingen zonder alleen op training te vertrouwen.
De sleutel is te weten wanneer readonly op het niveau van de weergave versus het niveau van het model moet worden toegepast, en ervoor te zorgen dat de voorwaarden overeenkomen met hoe uw team daadwerkelijk werkt. Een goed geconfigureerd Odoo-gegevensmodel maakt altijd doordacht gebruik van readonly-velden op de juiste momenten in de levenscyclus van het document.
Of u ze nu configureert via Odoo Studio voor een no-code benadering of ze rechtstreeks definieert in Python en XML als onderdeel van een breder Odoo-ontwikkelingsproject, de logica achter readonly-velden blijft consistent: toon de gegevens, maar bescherm ze tegen onbedoelde wijzigingen.
Ze zijn misschien niet het meest besproken onderwerp in Odoo-aanpassing, maar ze zijn stilletjes een van de meest impactvolle.
Bij Dasolo helpen we bedrijven bij het implementeren, aanpassen en optimaliseren van Odoo in alle modules en industrieën. Als u hulp nodig heeft bij het configureren van velden, het ontwerpen van betrouwbare workflows of het verbeteren van uw Odoo-gegevensmodel, staat ons team klaar om u te ondersteunen. Neem contact op en vertel ons over uw project.