Passa al contenuto

Campo HTML in Odoo: Guida Completa e Pratica

Guida completa al campo Html nel modello dati di Odoo: dall’uso quotidiano alla personalizzazione tecnica
6 marzo 2026 di
Campo HTML in Odoo: Guida Completa e Pratica
Dasolo
| Ancora nessun commento

Introduzione


Quando navighi una scheda prodotto su uno shop realizzato con Odoo, quel testo formattato con titoli in grassetto, elenchi puntati e immagini non è magia: è alimentato da un unico tipo di campo nel modello dati chiamato campo Html. È uno dei campi più flessibili della piattaforma e lo trovi integrato in molte parti dell’app, spesso senza che gli utenti se ne accorgano.


A differenza di un campo testo semplice che conserva solo stringhe non formattate, il campo Html memorizza contenuti ricchi con tutta la formattazione. Questo lo rende indispensabile ovunque serva testo strutturato o stilizzato: descrizioni prodotto, template email, note interne o sezioni del sito web.


Questa guida spiega che cos’è il campo Html, come viene gestito dall’ORM e dal database di Odoo, dove viene impiegato nei processi aziendali reali e come aggiungerlo o personalizzarlo con Odoo Studio o con codice Python. Troverai anche i principali errori da evitare quando lo utilizzi.

Che cos'è il campo Html in Odoo


Nel modello dati di Odoo il campo Html è pensato per salvare contenuto HTML formattato. Sul database PostgreSQL viene mappato su una colonna di tipo TEXT e il valore memorizzato è una stringa HTML. Odoo si occupa di renderizzare e pulire il contenuto, così gli utenti vedono un editor WYSIWYG anziché il codice HTML grezzo.


Per l’utente il campo Html si presenta come un editor visivo WYSIWYG. È possibile applicare grassetti, corsivi, titoli, elenchi, link, tabelle e inserire immagini direttamente nel campo; tutto viene poi salvato come HTML strutturato dietro le quinte.


Esempio di definizione del campo in un modello Python:

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,
    )

Il parametro string definisce l’etichetta visibile nel form. L’opzione sanitize controlla se Odoo deve rimuovere automaticamente elementi HTML potenzialmente pericolosi prima del salvataggio: è una misura di sicurezza attiva di default.


In Odoo Studio il campo viene chiamato Html o Rich Text. Se lo crei con Studio, il suo nome tecnico riceverà il prefisso x_studio_. Definendolo in Python o via API XML-RPC sei tu a scegliere il nome tecnico.

Come funziona il campo


Quando aggiungi un campo Html, Odoo crea una colonna TEXT in PostgreSQL senza limiti di lunghezza impostati a livello di DB, quindi è adatto a contenuti lunghi. Il framework applica la sanitizzazione prima che il valore sia scritto sul database.


Sanitizzazione e sicurezza

La caratteristica che distingue davvero il campo Html è il suo livello di sanitizzazione. Di default Odoo rimuove tag o attributi HTML potenzialmente sfruttabili per attacchi XSS. Questo comportamento è gestito da una serie di attributi del campo:

  • sanitize: Quando True (default), Odoo esegue il processo completo di pulizia prima del salvataggio. Impostalo su False solo se sei sicuro che il contenuto provenga da una fonte assolutamente affidabile e che sia necessario preservare HTML grezzo.
  • sanitize_tags: Se True, Odoo elimina i tag HTML non presenti nella lista consentita. Disabilitarlo permette tag arbitrari ma aumenta i rischi di sicurezza.
  • sanitize_attributes: Controlla la pulizia degli attributi all’interno dei tag HTML.
  • sanitize_style: Determina se gli stili inline vengono filtrati. Per impostazione predefinita alcuni stili CSS sono permessi mentre quelli potenzialmente pericolosi vengono rimossi.
  • strip_style: Se True rimuove completamente gli attributi di stile inline.
  • strip_classes: Se True rimuove tutte le classi CSS dal contenuto memorizzato.

Questa sanitizzazione rende il campo Html sicuro per contenuti generati dagli utenti, motivo per cui è utilizzato in moduli rivolti ai clienti e nei template email di Odoo.


Attributi chiave del campo

Oltre alla sanitizzazione, il campo Html integra molti degli attributi standard dei campi Odoo:


  • translate: Se impostato a True, il contenuto del campo può essere tradotto per lingua. Odoo memorizza versioni separate dell’HTML per ogni lingua attiva.
  • required: Rende il campo obbligatorio. Attenzione: un campo Html popolato solo da tag vuoti o spazi può sembrare non vuoto all’interfaccia, quindi la validazione funziona meglio su valori realmente vuoti.
  • default: Imposta un valore HTML predefinito per nuovi record. Utile per precompilare template email o descrizioni standard.
  • compute: Collega una funzione Python che genera dinamicamente l’HTML. Con store=True il risultato viene salvato nel database.
  • copy: Controlla se il contenuto HTML viene duplicato quando si copia un record. Il valore predefinito è True.

Come appare nelle viste

Nelle viste form il campo Html si presenta come editor ricco con una barra degli strumenti per formattare testo, inserire immagini e link. Nelle viste elenco, per mantenere leggibilità, Odoo mostra solitamente un’anteprima in testo semplice con i tag HTML rimossi.


L’attributo widget nelle viste XML permette di controllare la resa. Il widget predefinito è l’editor ricco; puoi però usare il widget html in modalità sola lettura per mostrare il contenuto già renderizzato, utile in report PDF o pagine portal dove non serve l’editor.


Interazione con l’ORM di Odoo

Dal punto di vista dello sviluppo, leggere un campo Html restituisce una stringa con il markup HTML. Scriverci richiede una stringa HTML; la sanitizzazione avviene a livello dell’ORM prima della scrittura sul database, quindi anche valori inviati via XML-RPC vengono puliti se sanitize=True.


Implicazione pratica: se devi memorizzare tag o attributi HTML personalizzati non presenti nella lista consentita, devi impostare sanitize=False o modificare i flag di sanitizzazione del campo. Si tratta di un caso avanzato che richiede attenzione alla sicurezza nell’ambiente di produzione.

Casi d'uso aziendali


Il campo Html compare in molte aree di un’implementazione Odoo. Ecco cinque esempi pratici tratti da workflow aziendali comuni.


Magazzino ed e‑commerce: descrizioni prodotto

Il campo Html più usato è probabilmente description_sale su product.template: è la descrizione prodotto vista dal cliente sul sito e nelle righe ordine. Permette ai team merchandising di creare testi strutturati con punti elenco, titoli e immagini, migliorando la conversione e mantenendo un’unica fonte di verità per back office e storefront.


Email marketing: corpo dei template

I template email di Odoo si basano su campi Html: body_html su mail.template contiene l’intero corpo dell’email con layout, immagini e segnaposto dinamici sostituiti al momento dell’invio. I team marketing possono progettare contenuti ricchi direttamente in Odoo senza strumenti esterni, riutilizzandoli in campagne e workflow automatici.


CRM: note e descrizioni opportunità

Le squadre vendita spesso devono registrare contesti dettagliati su un lead o un’opportunità. Campi Html su lead e opportunity consentono note formattate con elenchi e link a documenti esterni, utili quando le informazioni devono essere condivise nel team o integrate in report stampati.


Contabilità: termini e condizioni nelle fatture

Molte aziende inseriscono clausole legali, termini di pagamento o garanzie sulle fatture. Il campo note su ordini di vendita e fatture è un campo Html: questo permette di mantenere la formattazione anche nei PDF stampati, con interruzioni di riga e enfasi preservate.


HR: descrizioni delle posizioni lavorative

Nelle offerte pubblicate con il modulo Recruitment, la descrizione del ruolo su hr.job e hr.applicant è un campo Html. Consentire sezioni chiare per responsabilità, requisiti e benefit aiuta a presentare annunci professionali e attrarre candidati appropriati.

Creare o personalizzare il campo Html


Ci sono tre modi principali per aggiungere un campo Html a un modello Odoo, a seconda dell’approccio tecnico e del flusso di deployment.


Con Odoo Studio (No Code)

Odoo Studio permette di aggiungere facilmente un campo Html a qualsiasi form senza scrivere codice:

  1. Apri Odoo Studio dal menu principale.
  2. Vai alla form dove vuoi inserire il campo.
  3. Trascina dalla barra laterale un campo Html o Rich Text sulla form.
  4. Imposta l’etichetta e le opzioni nel pannello proprietà del campo.
  5. Salva e chiudi Studio.

Studio crea automaticamente il campo con prefisso x_studio_, lo aggiunge alla vista e crea la colonna database. Non sono necessari ulteriori passaggi di migrazione: il campo è subito disponibile in tutta l’istanza.


Con Python in un modulo personalizzato

Per sviluppatori che gestiscono moduli Odoo è consigliabile definire i campi Html nel codice Python: questo consente versioning e deployment controllati in staging e produzione:


from odoo import fields, models

class SaleOrder(models.Model):
    _inherit = 'sale.order'

    x_delivery_instructions = fields.Html(
        string='Delivery Instructions',
        sanitize=True,
        translate=True,
    )

Dopo aver definito il campo nel modello, aggiungilo alla vista XML pertinente. L’installazione o l’aggiornamento del modulo crea la colonna TEXT automaticamente. In form il campo viene renderizzato come editor ricco senza configurazioni aggiuntive.


Via API XML‑RPC

Se gestisci personalizzazioni in modo programmato, puoi creare campi Html anche tramite 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',
    }]
)

Il valore ttype: 'html' indica a Odoo di creare un campo Html. state: 'manual' lo marca come campo creato dall’utente anziché definito in un modulo. Questo approccio è utile per script di provisioning o configurazioni remote automatizzate.


Nota: le opzioni di sanitizzazione (sanitize, sanitize_tags, ecc.) non sono impostabili via API su ir.model.fields nello stesso modo del Python; si applicano i comportamenti di sanitizzazione predefiniti quando si creano campi tramite API.

Buone pratiche


1. Mantieni sanitize attivo salvo motivi validi

La sanitizzazione di default protegge la tua istanza da vulnerabilità XSS. Nella maggior parte dei casi funziona perfettamente: disabilitala solo per contenuti generati da processi server‑trusted e mai per input diretto da utenti esterni.


2. Usa translate=True per contenuti multilingua

Se Odoo gestisce più lingue, i campi Html destinati al sito o a documenti verso clienti dovrebbero avere translate=True, così puoi mantenere versioni HTML separate per ogni lingua e offrire contenuti sempre coerenti al visitatore.


3. Evita dipendenze da risorse esterne

Incorporare immagini o script da URL esterni crea dipendenze che possono rompersi. Meglio memorizzare le immagini come attachment interni e usare URL relativi: così il contenuto resta portabile attraverso migrazioni e cambi di server.


4. Usa campi Html computed per contenuti dinamici

Per contenuti costruiti via codice — ad esempio un riepilogo formattato delle righe ordine — conviene usare un campo compute con store=True. La logica è centralizzata, il risultato è veloce da leggere e funziona correttamente anche nei PDF.


5. Valuta il contesto di rendering: Html o Text?

Se il contenuto verrà mostrato solo come testo semplice in backend, un campo Text può bastare. Usa Html quando la formattazione è importante (sito web, documenti stampati, email). Aggiungere un editor ricco dove non serve complica l’esperienza utente inutilmente.

Errori comuni


Disattivare sanitize e dimenticarsene

Impostare sanitize=False su un campo editabile dagli utenti è rischioso. Spesso avviene in fase di sviluppo per velocizzare una richiesta di formattazione e poi non viene rivisto prima del rilascio. Documenta sempre la motivazione e pianifica una verifica prima di andare in produzione.


Incollare contenuti da sorgenti esterne con HTML malformato

Copiare da Word, Google Docs o pagine web può introdurre HTML disordinato: rendering incoerente, caratteri invisibili che compromettono le ricerche o valore del campo gonfiato. Insegna agli utenti a usare "Incolla come testo" e a riformattare nell’editor Odoo.


Confondere il campo Html con il contenuto del website builder

Il website builder di Odoo usa blocchi e componenti Owl: l’HTML generato non è identico a quello da mettere in un campo Html standard. Copiare HTML complesso del builder in un campo modello di solito non renderizza correttamente e la sanitizzazione può rimuoverlo.


Dimenticare translate in ambienti multilingua

In un’istanza multilingua, un campo Html senza translate=True mostra lo stesso contenuto a tutti gli utenti. Va bene per campi interni, ma è un problema per descrizioni prodotto, template email e tutto ciò che raggiunge contatti esterni. Spesso viene trascurato all’inizio e diventa difficile da correggere dopo che il contenuto è stato inserito.


Usare Html dove serve testo semplice

Some parts of Odoo, such as email subjects, report titles, or external API responses, expect plain text strings. If you store an Html field value in a context where the HTML tags are not stripped, your users will see raw markup like <p>Hello</p> instead of clean text. Always check how and where the field value will be consumed before choosing Html over Char or Text.

Conclusione


Il campo Html è uno dei più potenti nel modello dati di Odoo: lavora dietro le quinte su descrizioni prodotto, template email, annunci di lavoro e note su fatture, abilitando contenuti formattati senza strumenti esterni.


Comprendere il suo funzionamento — in particolare la sanitizzazione, il supporto alle traduzioni e il comportamento nei diversi contesti di rendering — ti aiuta a prendere decisioni migliori nella progettazione e personalizzazione di un’istanza Odoo. Che tu usi Studio, definisca il campo in Python o lo crei via API, i principi di questa guida restano validi.


Come spesso accade in Odoo, il meccanismo è semplice quando sai cosa avviene dietro le quinte. Il valore reale nasce dall’usarlo nei posti giusti, con le impostazioni adeguate e per il tipo di contenuto corretto.

Da Dasolo supportiamo le aziende nell’implementazione, personalizzazione e ottimizzazione di Odoo in tutti i reparti. Se ti serve aiuto a progettare un modello dati pulito, aggiungere campi su misura o sviluppare moduli completi, il nostro team può assisterti. Contattaci e parliamo del tuo progetto Odoo.

Campo HTML in Odoo: Guida Completa e Pratica
Dasolo 6 marzo 2026
Condividi articolo
Accedi per lasciare un commento