Innledning
Når du ser en produktbeskrivelse i en Odoo-nettbutikk—med fete overskrifter, punktlister og innebygde bilder—kommer all den formaterte teksten fra én og samme felttype: Html-feltet. Dette feltet er ekstremt fleksibelt i Odoo-modellen og dukker opp i flere sammenhenger enn mange tror.
I motsetning til et enkelt tekstfelt som bare lagrer en ustrukturert streng, holder Html-feltet på rik tekst og strukturert HTML. Derfor er det førstevalget når brukere trenger formatering—enten det gjelder produktsider, e-postmaler, interne notater eller innhold på en nettside.
Denne guiden forklarer hva Html-feltet er, hvordan det lagres og behandles i Odoo/ORM og PostgreSQL, hvilke arbeidsprosesser det typisk brukes i, og hvilke metoder du kan bruke for å legge det til eller endre det via Odoo Studio, Python-moduler eller API. Vi går også gjennom de vanligste feilene folk gjør.
Hva er Html-feltet i Odoo
I Odoo sin objekt-relasjonelle modell lagres Html-feltet som formaterte HTML-strenger. I databasen får feltet en TEXT-kolonne i PostgreSQL, og Odoo sørger for å vise en rik tekst-editor i brukergrensesnittet samtidig som det kjører nødvendige rensingsrutiner før lagring.
For brukeren vises Html-feltet som en WYSIWYG-editor. Man får verktøylinje for fet/italiс, overskrifter, lister, lenker, tabeller og mulighet til å sette inn bilder. Alt brukeren skriver blir konvertert til gyldig HTML i bakgrunnen.
Slik ser definisjonen av et Html-felt ut i en Python-modell:
from odoo import fields, models
class ProductTemplate(models.Model):
_inherit = 'product.template'
x_technical_specs = fields.Html(
string='Technical Specifications',
sanitize=True,
sanitize_tags=True,
)
Parameteren string angir etiketten som vises i skjemaet. Flagget sanitize bestemmer om Odoo skal fjerne potensielt farlig HTML før lagring—dette er viktig for sikkerheten og er som regel aktivert som standard.
I Odoo Studio heter feltet enten Html eller Rich Text. Felt som opprettes via Studio får vanligvis et x_studio_-prefiks. Når du definerer felt i Python eller via API, kan du velge det tekniske navnet selv.
Slik fungerer feltet
Når du oppretter et Html-felt oppretter Odoo en TEXT-kolonne i PostgreSQL uten lengdebegrensning, noe som gjør feltet egnet for lange beskrivelser. Rensingen skjer i rammeverket før dataene blir skrevet til databasen.
Rensing og sikkerhet
Det som skiller Html-feltet mest fra andre felttyper er renselaget. Som standard fjerner Odoo HTML-elementer og attributter som kan utnyttes til XSS-angrep. Dette styres av flere feltattributter:
- sanitize: Når
True(standard) kjører Odoo full rensing før lagring. Bare sett tilFalsenår innholdet kommer fra en fullstendig pålitelig intern kilde og du trenger å bevare rå HTML. - sanitize_tags: Når
Truefjernes alle tags som ikke står på den tillatte listen. Å slå dette av åpner for vilkårlige tags og krever stor forsiktighet. - sanitize_attributes: Styrer rensing av attributter på HTML-tagger.
- sanitize_style: Avgør hvilke inline-stiler som tillates. Som regel godtas noen trygge CSS-egenskaper mens potensielt farlige fjernes.
- strip_style: Når
True, fjernes alle inline style-attributter helt. - strip_classes: Når
True, fjernes alle CSS-klasseattributter fra det lagrede innholdet.
Denne rensingen gjør Html-feltet trygt for innhold fra brukere, og er grunnen til at det ofte brukes i kundevendte skjemaer og e-postmaler i Odoo.
Viktige feltattributter
I tillegg til sikkerhetsinnstillingene deler Html-feltet mange standardattributter som andre Odoo-felter har:
- translate: Sett til
Truegjør at innholdet kan oversettes per språk. Odoo lagrer separate HTML-versjoner for hver aktiv språkinnstilling. - required: Gjør feltet obligatorisk. Vær oppmerksom på at et Html-felt som kun inneholder mellomrom eller tomme tags kan fremstå som ikke-tomt i UI, så validering fungerer best mot virkelig tomt innhold.
- default: Setter en standard HTML-verdi for nye poster. Nyttig for forhåndsutfylte e-postmaler eller standard produkttekster.
- compute: Knytter feltet til en Python-metode som genererer HTML dynamisk. Med
store=Trueblir resultatet lagret i databasen. - copy: Bestemmer om innholdet kopieres ved duplikering av en post. Standard er
True.
Slik vises feltet i visninger
I skjema-visninger vises Html-feltet som rik tekst-editor med verktøylinje. I listevisninger viser Odoo ofte en forhåndsvisning uten HTML-tagger for å holde listene ryddige og lesbare.
I XML-visninger kan du styre hvordan feltet rendres via widget-attributtet. Standardwidgeten gir redigerbar rik tekst. For lesevisning, for eksempel på portalsider eller rapporter, kan du bruke html-widgeten for å vise rendret HTML uten redigeringsverktøy.
Samspill med Odoo ORM
For utviklere returnerer lesing av et Html-felt en streng som inneholder rå HTML-markup, og skriving krever en HTML-streng. Rensingen skjer i ORM-laget før dataene skrives til databasen, så også eksternt innskrevne verdier (f.eks. via XML-RPC) blir renset når sanitize=True.
En praktisk konsekvens: hvis du må lagre HTML med egendefinerte tags eller attributter utenfor Odoos standardliste, må du vurdere sanitize=False eller justerte sanitize-flagg. Dette er avansert og må vurderes opp mot sikkerhetsrisiko.
Forretningsscenarier
Html-feltet brukes i mange deler av en Odoo-implementasjon. Her er fem konkrete eksempler fra typiske arbeidsprosesser.
Lager og e-handel: produktbeskrivelser
Et av de vanligste bruksområdene er description_sale på product.template. Dette er produktteksten kundene ser i nettbutikken og i salgsordrer. Html-felt gjør det mulig å skrive strukturerte beskrivelser med punktlister, overskrifter og bilder—ting som øker konverteringsraten i netthandel. Samme produktdata brukes i back office og på nettbutikken, så du unngår dublering.
E-postmarkedsføring: e-postmaler
E-postmaler i Odoo lagrer hele brødteksten som HTML i body_html på mail.template. Dette inkluderer layout, bilder og dynamiske plassholdere som fylles ut ved utsendelse. Markedsførere kan bygge rike e-poster direkte i Odoo uten eksterne designverktøy, og innholdet kan gjenbrukes i kampanjer og automatiserte flyter.
CRM: notater og mulighetsbeskrivelser
Salgsteam bruker ofte Html-felt i CRM for detaljerte notater og beskrivelser av muligheter. Formatering, lister og lenker gjør notater enklere å dele og lese, og bevarer kontekst når innholdet blir skrevet ut eller inkludert i rapporter.
Regnskap: fakturatekster og vilkår
Feltet note på salgsordrer og fakturaer er et Html-felt, noe som gjør det enkelt å legge inn betalingsbetingelser, juridiske klausuler eller garantibetingelser med riktig formatering. På PDF-fakturaer beholdes linjeskift og uthevinger slik de ble skrevet.
HR: stillingsannonser
Ved rekruttering lagres stillingsbeskrivelser som HTML på hr.job og hr.applicant. Det gir ryddige seksjoner for ansvarsområder, krav og fordeler—nøyaktig det som trengs for profesjonelle stillingsannonser på karrieresider.
Å opprette eller tilpasse Html-feltet
Tre hovedmåter å legge til Html-felt i en Odoo-modell, avhengig av teknisk nivå og deploy-strategi.
Bruke Odoo Studio (ingen koding)
Odoo Studio gjør det enkelt å legge til Html-felt uten programmering:
- Åpne Odoo Studio fra hovedmenyen.
- Gå til skjemaet hvor du vil ha feltet.
- Dra en Html- eller Rich Text-komponent fra sidepanelet inn i skjemaet.
- Angi etikett og eventuelle egenskaper i feltets innstillingspanel.
- Lagre og lukk Studio.
Studio oppretter feltet med x_studio_-prefiks, legger det i visningen og håndterer databasekolonnen automatisk. Ingen ekstra migrasjon eller deploy-steg kreves, feltet er umiddelbart klart for bruk i hele instansen.
Bruke Python i en egen modul
Utviklere legger Html-felt inn i Python-modelfiler når endringene skal versjonskontrolleres og deployes til ulike miljøer:
from odoo import fields, models
class SaleOrder(models.Model):
_inherit = 'sale.order'
x_delivery_instructions = fields.Html(
string='Delivery Instructions',
sanitize=True,
translate=True,
)
Etter å ha definert feltet i modellen må du legge det inn i relevant visnings-XML for at det skal være synlig i UI. Når modulen installeres eller oppgraderes opprettes TEXT-kolonnen automatisk og feltet rendres som rik tekst-editor i skjemaet.
Bruke XML-RPC API
Hvis du automatiserer konfigurasjon eller styrer Odoo eksternt, kan du opprette Html-felt gjennom XML-RPC:
field_id = models.execute_kw(
ODOO_DB, uid, ODOO_API_KEY,
'ir.model.fields', 'create',
[{
'name': 'x_custom_notes',
'field_description': 'Custom Notes',
'model_id': model_id,
'ttype': 'html',
'state': 'manual',
}]
)
Verdien ttype: html instruerer Odoo om å opprette et Html-felt. state: manual markerer det som et brukerskapte felt, ikke en moduldefinisjon. Denne tilnærmingen brukes ofte i automatiserte konfigurasjonsskript for kunder der man ønsker fjernopprettelse av felt.
Merk at detaljerte sanitize-innstillinger som sanitize og sanitize_tags ikke alltid kan settes direkte via ir.model.fields-APIet slik de kan i Python. Standard rensingsregler gjelder for felt opprettet via API.
Anbefalte fremgangsmåter
1. La rensing være på med mindre du har en god grunn til å slå den av
Standardrensing er der for å beskytte mot XSS. De fleste scenarier fungerer fint med rensing aktivert. Deaktiver bare rensing hvis innholdet kommer fra en fullstendig betrodd, intern kilde—aldri for innhold fra eksterne brukere.
2. Bruk translate=True for flerspråklig innhold
I instanser med flere språk bør Html-felt som vises til kunder eller på offentlige dokumenter ha translate=True. Da kan dere vedlikeholde egne beskrivelser per språk slik at kunder får innhold på korrekt språk i stedet for fallback.
3. Ikke avhengig av eksterne ressurser i HTML-en
Å lenke til eksterne bilder eller skript fra Html-felt skaper avhengigheter som kan feile hvis URL-ene forsvinner. Bruk Odoos vedleggssystem for å hoste bilder internt og referer dem med relative eller interne lenker for å gjøre innholdet mer robust ved migrasjoner eller serverbytter.
4. Bruk beregnede Html-felt for dynamisk innhold
Når innhold må settes sammen programmatisk—f.eks. en formaterbar oppsummering av ordrelinjer—er et compute Html-felt med store=True en god løsning. Logikken er sentralisert i Python, resultatet lagres for rask tilgang, og feltet rendres riktig i UI og i PDF-rapporter.
5. Velg Html bare når formatering betyr noe
Hvis innholdet kun vises som ren tekst i backend, kan et enkelt Text-felt være nok. Bruk Html kun der leseren faktisk trenger formatering—på nettsider, i trykte dokumenter eller i e-poster. Å legge inn et Html-felt der tekst er tilstrekkelig kompliserer unødvendig for brukerne.
Vanlige fallgruver
Å slå av rensing og glemme det
Å sette sanitize=False for et felt brukere kan redigere er en sikkerhetsrisiko. Det skjer ofte i utviklingsfasen for å få gjennom ønsket formatering, og så blir det glemt før produksjon. Dokumenter alltid hvorfor rensing er slått av og planlegg gjennomgang før go-live.
Å lime inn kaotisk HTML fra eksterne kilder
Når brukere limer inn innhold fra Word, Google Docs eller nettsider kan HTML-en bli rotete, inneholde usynlige tegn eller ødelagte elementer. Dette gir uensartet rendering og kan gjøre innholdet tungt. Oppfordre brukere til først å lime inn som ren tekst og så formatere i editoren.
Forveksling med nettstedbyggerens innhold
Odoos nettstedbygger bruker blokker og Owl-komponenter—det HTML-et er ikke det samme som standard Html-felt på modeller. Å kopiere komplekst nettsted-HTML inn i et vanlig Html-felt vil ofte gi feil eller bli renset bort.
Å glemme translate ved flerspråklige oppsett
På en flerspråklig instans vil et Html-felt uten translate=True vise samme innhold for alle språkbrukere. Det kan gå greit internt, men blir et problem for produktsider, e-poster og annet kundevendt innhold. Feilen er lett å overse tidlig og vanskelig å rette når innhold allerede er lagt inn.
Å bruke Html-felt der ren tekst forventes
Noen deler av Odoo—som e-postemner, rapporttitler eller API-responser—forventer ren tekst. Hvis HTML ikke blir fjernet i slike kontekster, ser brukeren markup som <p>Hei</p> i stedet for ren tekst. Sjekk alltid forbrukskonteksten før du velger Html over Char eller Text.
Oppsummering
Html-feltet er et av de mest nyttige feltene i Odoo-modellen. Det ligger i bakgrunnen på produktbeskrivelser, e-postmaler, jobbannonser og fakturatekst, og lar deg ha formaterte tekster i hele systemet uten eksterne verktøy.
Å forstå hvordan feltet oppfører seg—spesielt rensingen, oversettelsesstøtten og hvordan det rendres i ulike kontekster—gjør det enklere å ta riktige valg når du designer og tilpasser en Odoo-instans. Enten du bruker Studio, definerer felt i Python eller oppretter dem via API, gjelder de samme prinsippene.
Som med mye i Odoo blir Html-feltet enkelt å jobbe med når du vet hva som skjer under panseret. Verdien kommer av å bruke feltet på rette steder, med riktige innstillinger og riktig innholdstype.
I Dasolo hjelper vi bedrifter med å implementere, tilpasse og optimalisere Odoo i alle avdelinger. Enten dere trenger hjelp til å bygge en ryddig datamodell, legge til skreddersydde felt eller utvikle komplette moduler, kan vårt team bistå. Ta kontakt med oss så tar vi en prat om ditt Odoo-prosjekt.