Readonly-felt er en av de funksjonene i Odoo som virker enkle i starten, men som spiller en mye større rolle enn de fleste brukere forventer.
Enten du er en forretningsbruker som lurer på hvorfor visse felt er grået ut, eller en utvikler som ønsker å kontrollere feltoppførselen i din Odoo-tilpasning, dekker denne guiden alt du trenger å vite.
Å forstå hvordan readonly-felt fungerer er nøkkelen til å bygge pålitelige arbeidsflyter, beskytte dataintegritet og levere en smidigere opplevelse for teamet ditt.
Denne Odoo-feltveiledningen går gjennom både forretnings- og tekniske sider av readonly, så enten du konfigurerer Odoo eller bygger videre på det, vil du finne det du trenger her.
Hva er readonly-feltet i Odoo
Et readonly-felt i Odoo er et felt som viser en verdi, men som ikke kan redigeres direkte av brukeren gjennom grensesnittet. Dataene er synlige, men inndataene er låst.
I formvisningen vises readonly-felter vanligvis som ren tekst i stedet for interaktive inndatafelt. Avhengig av Odoo-temaet kan de se litt gråaktige ut eller bare flate sammenlignet med redigerbare felt.
Innen Odoo-datamodellen kan readonly-atferd brukes på to distinkte nivåer:
- På feltnivå (Python/ORM): feltet er alltid readonly på tvers av alle visninger og kontekster
- På visningsnivå (XML): feltet er readonly i en spesifikk visning eller under spesifikke betingelser
Denne distinksjonen er viktig. Et felt merket som readonly på ORM-nivå kan ikke redigeres gjennom noe brukergrensesnitt. Et felt merket readonly på visningsnivå er beskyttet i den spesifikke konteksten, men kan fortsatt være skrivbart i andre visninger eller gjennom server-side kode.
Readonly er ikke en felttype i seg selv. Det er en attributt som kan brukes på noen av de standard Odoo-felttypene: Char, Integer, Float, Many2one, Date, og andre. Dette er en kjernekomponent i Odoo-rammeverket for å kontrollere hvordan felt oppfører seg under kjøring.
Hvordan readonly-feltet fungerer
For å forstå hvordan readonly-felter oppfører seg, er det nyttig å se på begge sider: Odoo ORM (Python) og visningslaget (XML).
Readonly på ORM-nivå
I Odoo ORM kan et felt erklæres som permanent readonly direkte i Python-modellen. Dette er mest vanlig for beregnede felt som henter verdien sin fra andre data. Feltdefinisjonen inkluderer readonly=True som en parameter, og Odoo vil aldri tillate brukeren å redigere det gjennom UI.
Dette nivået av readonly er en del av Odoo Python-feltene API og er dokumentert i den offisielle Odoo utviklerguiden. Det gjelder globalt, uavhengig av hvilken visning som brukes.
Tilstandsbasert readonly
Et av de vanligste mønstrene i Odoo-utvikling er å gjøre et felt readonly basert på den nåværende tilstanden til et dokument. Dette er hvordan standardmoduler som Salg, Innkjøp og Regnskap låser dataene sine når et dokument går forbi utkaststadiet.
I Odoo 16 og tidligere versjoner ble dette gjort ved hjelp av attrs-attributtet i visnings-XML, som kombinerte en domene-betingelse med felt-elementet. I Odoo 17 og senere er syntaksen mer konsis og skrevet direkte som et inline-uttrykk på felt-elementet.
Begge tilnærminger oppnår det samme resultatet: feltet er redigerbart mens dokumentet er i utkast, og blir låst når det går videre i arbeidsflyten. Dette er et grunnleggende konsept i enhver Odoo teknisk tutorial som dekker feltkonfigurasjon.
Beregnede felt og skrivebeskyttet
Odoo beregnede felt er skrivebeskyttet som standard. Når du definerer et felt med en compute-metode, antar Odoo at det ikke skal redigeres direkte fordi verdien er avledet automatisk fra andre felt.
Hvis du vil at et beregnet felt også skal lagres, setter du både compute-parameteren og store=True. Disse lagrede Odoo-databasefeltene er et vanlig mønster for ytelsesoptimalisering, siden de kan brukes i søkefiltre og sorteres effektivt på databasenivå uten å måtte beregne verdier på nytt.
Gjør et beregnet felt skrivbart
Hvis du trenger at et beregnet felt også skal akseptere manuell inndata, kan du definere en invers metode ved siden av det. Den inverse metoden forteller Odoo hva som skal gjøres når en bruker skriver en verdi til det beregnede feltet. Uten en invers forblir feltet skrivebeskyttet som standard. Dette er en del av de mer avanserte Odoo ORM-felttyper API-en og dekkes grundig i Odoo utviklerguiden.
Forretningsbrukstilfeller
Skrivebeskyttede felt vises i alle Odoo-moduler. Her er fem praktiske eksempler fra virkelige forretningsarbeidsflyter.
1. CRM: Låsing av vunnet og tapt mulighetsdata
I CRM-modulen er forventet inntekt og sluttdato redigerbare mens en lead blir bearbeidet. Når en mulighet er merket som vunnet eller tapt, settes disse feltene til skrivebeskyttet for å bevare en nøyaktig registrering av hva som ble avsluttet og til hvilken verdi.
Dette forhindrer at noen går tilbake og justerer tallene i ettertid, noe som ville forvrengt salgsrapporter og pipeline-analyser.
2. Salg: Beskytte bekreftede ordrelinjer
Når en salgsordre går fra utkast til bekreftet, blir ordrelinjene skrivebeskyttet. Brukere kan ikke lenger endre produkt, mengde eller pris etter at kunden har mottatt en bekreftelse.
Hvis endringer virkelig er nødvendige, må ordren eksplisitt tilbakestilles til utkast, noe som skaper en revisjonsspor og gjør korrigeringen intensjonell snarere enn tilfeldig.
3. Lager: Validerte lagerbevegelser
I lageroperasjoner, når en levering eller mottak er validert, blir de utførte mengdene låst. Dette beskytter integriteten til lagerverdien og sikrer at registrene samsvarer med det som fysisk har beveget seg gjennom lageret.
Redigerbare mengder etter validering kan stille og rolig korrumpere lagerbeholdningen på tvers av flere lokasjoner.
4. Regnskap: Posterte journalpostlinjer
I regnskapet, når en journalpost er postert, blir alle linjene skrivebeskyttet. Dette er både et lovkrav i mange land og et kjerneprinsipp i dobbel bokføring.
Å tillate redigering etter posting ville kompromittere påliteligheten til finansielle uttalelser og skape alvorlige samsvarsrisikoer.
5. Produksjon: Fullførte arbeidsordredata
I produksjonsmodulen, når en arbeidsordre er merket som ferdig, blir den faktiske varigheten og produserte mengder satt til skrivebeskyttet. Dette bevarer nøyaktige produksjonsregistre som bidrar til kostnadsanalyse og ytelsessporing.
Opprette eller tilpasse et readonly-felt
Det er to hovedveier for å konfigurere skrivebeskyttede felt i Odoo: ved å bruke Odoo Studio for en kodefri tilnærming, eller ved å skrive Python og XML direkte for full teknisk kontroll.
Ved å bruke Odoo Studio
Odoo Studio-felt gjør det enkelt å legge til eller endre readonly-atferd uten å skrive noe kode. For å konfigurere et felt som readonly ved hjelp av Studio:
- Åpne Odoo Studio fra hovedmenyen (blyantikonet)
- Naviger til skjemaet der du vil konfigurere feltet
- Klikk på feltet du vil endre
- I høyre sidepanel for egenskaper, aktiver "Readonly"-alternativet
- Lagre og lukk Studio
Studio lar deg også sette betinget readonly atferd ved hjelp av domeneuttrykk. For eksempel kan du gjøre et felt readonly bare når et statusfelt er lik en spesifikk verdi, uten å skrive en eneste linje med kode.
Metoden for å opprette felt i Odoo Studio er det riktige valget for konsulenter og administratorer som trenger å håndheve dataregler raskt og trygt. Endringer gjort gjennom Studio lagres i databasen og vil ikke bli overskrevet av moduloppgraderinger.
Bruke Python for teknisk tilpasning
For utviklere som bygger tilpassede Odoo-moduler, settes readonly-attributtet direkte på feltdefinisjonen i Python-modellen. Dette er standard bruk av Odoo Python-felt og dekkes i hver Odoo utviklerguide.
Du kan sette readonly=True som en statisk parameter på hvilken som helst felttype, noe som gjør det permanent ikke-redigerbart. For mer fleksibel kontroll lar states-parameteren deg definere i hvilke dokumenttilstander feltet skal være skrivbart versus readonly.
Denne tilnærmingen er spesielt nyttig når du legger til tilpassede felt til eksisterende Odoo-modeller som en del av et Odoo-tilpasningsprosjekt. Det holder feltlogikken nær datamodellen i stedet for å være spredt over flere visningsfiler.
Bruke XML Visningsattributter
For visningsnivå readonly-atferd, legger du til readonly-attributtet direkte til felt-elementet i din visnings-XML. Dette er en del av den standard Odoo utviklingsarbeidsflyten for enhver teknisk tilpasning.
Fordelen med visningsnivå readonly er fleksibilitet: det samme feltet kan oppføre seg forskjellig i forskjellige visninger, eller under forskjellige forhold, uten å endre den underliggende feltdefinisjonen. Dette er ofte den foretrukne tilnærmingen når du trenger å legge til restriksjoner på eksisterende standardfelt uten å endre deres Python-definisjon.
I Odoo 17 er den inline uttrykksyntaksen for readonly-betingelser renere og mer lesbar enn den eldre attrs-ordboksyntaksen som ble brukt i tidligere versjoner. Begge tilnærmingene er gyldige avhengig av hvilken Odoo-versjon du kjører.
Beste praksis
Å bruke readonly-felt godt handler om å anvende dem på riktig nivå, av riktig grunn. Her er de viktigste retningslinjene fra et Odoo konsulentperspektiv.
1. Foretrekk Visningsnivå Readonly Når Konteksten Varierer
Hvis et felt må være readonly bare i visse dokumenttilstander eller i spesifikke visninger, anvend readonly på visningsnivå i stedet for modellnivå. Dette holder Odoo datamodellen din fleksibel og lar backend-prosesser eller API-integrasjoner fortsatt skrive til feltet når det er nødvendig.
2. Juster Readonly Betingelser med Dokumentlivssyklusen
Dine readonly-betingelser bør samsvare med den naturlige flyten av dokumentene dine. Felt bør låses når dokumentet når en tilstand der videre redigering vil forårsake problemer. Dette skaper en forutsigbar og intuitiv opplevelse for brukerne, som er et av kjennetegnene ved en godt implementert Odoo-tilpasning.
3. Test på Tvers av Brukerroller
Readonly-atferd kan samhandle med tilgangsrettigheter på uventede måter. Test alltid konfigurasjonen din både som en standardbruker og som administrator for å verifisere at feltet oppfører seg riktig for hver rolle. Det som ser readonly ut for en brukergruppe, kan fortsatt være redigerbart for en annen avhengig av deres profil.
4. Kombiner Readonly med Påkrevd Hvor Det Gir Mening
I flertrinns skjemaer kan et felt være påkrevd i utkast, men skrivebeskyttet i senere tilstander. Du kan kombinere begge attributtene i XML-visningen din for å håndheve dette mønsteret på en ren måte. Dette er vanlig for felt som leveringsdatoer eller referansenumre som må fylles ut før et dokument bekreftes.
5. Dokumenter Logikken Din for Skrivebeskyttelse
I tilpasset Odoo-utvikling, spesielt på komplekse datamodeller, bør du alltid legge til en kommentar som forklarer hvorfor et felt er skrivebeskyttet. Fremtidige utviklere som vedlikeholder koden må forstå forretningsgrunnen bak restriksjonen, ikke bare den tekniske implementeringen.
6. Bruk Studio-felt for Rask, Oppgraderingsvennlig Endringer
For enkle bruksområder tilbyr Odoo Studio-felt en rask og oppgraderingsvennlig måte å legge til skrivebeskyttet atferd. Reserver Python-tilpasning for tilfeller der Studio ikke kan levere den nødvendige logikken, som komplekse tverrfeltbetingelser eller integrasjon med tilpassede beregnede felt.
Vanlige fallgruver
Selv erfarne Odoo-brukere og utviklere møter de samme problemene med skrivebeskyttede felt. Her er de som er verdt å vite om før de tar deg på sengen.
Forvirre Visningsnivå Skrivebeskyttelse med en Sikkerhetsgrense
Et felt som er satt som skrivebeskyttet i en visning forhindrer ikke oppdateringer gjennom XML-RPC API, ORM skriveanrop i Python, eller serverhandlinger. Skrivebeskyttelse på visningsnivå er en UI-restriksjon, ikke en sikkerhetskontroll. Hvis du virkelig trenger å forhindre alle skriver til et felt, må du håndheve det på ORM-nivå eller gjennom tilgangskontrollregler, ikke bare i visningen.
Å Gjøre Felt Permanently Skrivebeskyttet Når Betinget Ville Vært Bedre
Det er fristende å låse et felt helt når du vil beskytte det. Men hvis brukere legitimt trenger å redigere det i visse situasjoner, som når de tilbakestiller et dokument til utkast, vil en permanent skrivebeskyttelse på ORM-nivå blokkere dem helt, inkludert eventuelle korrigeringsarbeidsflyter. Tenk alltid gjennom hele livssyklusen før du velger permanent fremfor betinget.
Å Glemme Om Onchange Metoder
Hvis et skrivebeskyttet felt også refereres i en onchange metode, kan den metoden fortsatt forsøke å tildele en verdi til det. Dette kan gi forvirrende atferd der feltet ser ut til å oppdatere under brukerinteraksjon, men deretter går tilbake eller utløser en feil. Sørg for at logikken din for onchange tar hensyn til skrivebeskyttede felt.
Ikke bruke readonly konsekvent på tvers av alle visninger
Et felt merket som readonly i skjema-visningen kan fortsatt være redigerbart i liste-visningen eller kanban-visningen hvis disse visningene ikke inkluderer den samme restriksjonen. Sjekk alltid at konfigurasjonen din for readonly er anvendt konsekvent på hver visning der feltet vises.
Bivirkninger ved å arve standardmodeller
Når du arver fra en standard Odoo-modell og legger til readonly=True til et eksisterende felt, påvirker denne endringen alle visninger som viser det feltet, inkludert standardvisninger. Sørg for at dette er intenjonelt og at det ikke vil bryte standard Odoo-atferd eller komme i konflikt med andre tilpasninger på den samme modellen.
Konklusjon
Readonly-felt er et grunnleggende verktøy i Odoo for å veilede brukere gjennom arbeidsflyter, beskytte dataintegritet og håndheve forretningsregler uten å stole på opplæring alene.
Nøkkelen er å vite når man skal bruke readonly på visningsnivå versus modellenivå, og sørge for at betingelsene stemmer overens med hvordan teamet ditt faktisk jobber. En godt konfigurert Odoo-datamodell bruker alltid readonly-felt på en gjennomtenkt måte i de riktige øyeblikkene i dokumentets livssyklus.
Enten du konfigurerer dem gjennom Odoo Studio for en kodefri tilnærming eller definerer dem direkte i Python og XML som en del av et bredere Odoo utviklingsprosjekt, forblir logikken bak readonly-felt konsekvent: vis dataene, men beskytt dem mot utilsiktede endringer.
De er kanskje ikke det mest diskuterte emnet innen Odoo-tilpasning, men de er stille en av de mest innflytelsesrike.
Hos Dasolo hjelper vi selskaper med å implementere, tilpasse og optimalisere Odoo på tvers av alle moduler og bransjer. Hvis du trenger hjelp med å konfigurere felt, designe pålitelige arbeidsflyter eller forbedre Odoo-datamodellen din, er teamet vårt klart til å støtte deg. Ta kontakt og fortell oss om prosjektet ditt.