Skip to content

Odoo Form View Widgets Reference: Every Widget Explained

DeployMonkey Team · March 23, 2026 12 min read

What Are Widgets in Odoo Views?

Widgets control how fields are displayed and edited in Odoo views. A Char field can render as a simple text input, an email link, a URL, or a phone number — all depending on the widget. Widgets are set in the XML view definition:

<field name="email" widget="email"/>
<field name="phone" widget="phone"/>
<field name="website" widget="url"/>

Text and Input Widgets

WidgetField TypeDescription
charCharDefault text input (no widget needed)
emailCharRenders as clickable mailto link
phoneCharRenders as clickable tel link
urlCharRenders as clickable hyperlink
textTextMulti-line textarea
htmlHtmlRich text editor (WYSIWYG)
char_emojisCharText input with emoji picker
passwordCharPassword dots, copy button
CopyClipboardCharCharText with copy-to-clipboard button
CopyClipboardTextTextTextarea with copy-to-clipboard button

Usage Examples

<field name="email" widget="email"/>
<field name="phone" widget="phone"/>
<field name="api_key" widget="CopyClipboardChar"/>
<field name="description" widget="html"/>

Numeric Widgets

WidgetField TypeDescription
integerIntegerDefault integer input
floatFloatDefault float input
monetaryMonetaryCurrency-formatted with symbol
percentageFloatShows as percentage (0.15 = 15%)
progressbarFloat/IntegerVisual progress bar
float_timeFloatDuration as HH:MM (1.5 = 01:30)
float_factorFloatMultiplied display (for UoM conversion)
<field name="amount_total" widget="monetary"/>
<field name="progress" widget="progressbar"/>
<field name="tax_rate" widget="percentage"/>
<field name="duration" widget="float_time"/>

Date and Time Widgets

WidgetField TypeDescription
dateDateDate picker
datetimeDatetimeDate + time picker
daterangeDateStart-end date range picker
remaining_daysDateShows days remaining (e.g., "in 3 days")
<field name="date_deadline" widget="remaining_days"/>
<field name="date_start" widget="daterange" options="{'end_date_field': 'date_end'}"/>

Relational Widgets

WidgetField TypeDescription
many2oneMany2oneDefault dropdown with search
many2one_avatarMany2oneShows avatar image next to name
many2one_avatar_userMany2oneUser avatar with online status
many2many_tagsMany2manyColored tag chips
many2many_tags_avatarMany2manyTag chips with avatars
many2many_checkboxesMany2manyCheckbox list
many2many_binaryMany2manyFile attachment list
one2manyOne2manyInline list/form editor
selectionSelectionDefault dropdown
radioSelectionRadio button group
selection_badgeSelectionBadge/pill buttons
<field name="user_id" widget="many2one_avatar_user"/>
<field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color'}"/>
<field name="type" widget="radio"/>
<field name="priority" widget="selection_badge"/>

Status and State Widgets

WidgetField TypeDescription
statusbarSelection/Many2oneStep-by-step status bar at top of form
prioritySelectionStar rating (0-3 stars)
boolean_toggleBooleanToggle switch instead of checkbox
boolean_favoriteBooleanStar icon toggle
<header>
    <field name="state" widget="statusbar" statusbar_visible="draft,confirmed,done"/>
</header>
<field name="priority" widget="priority"/>
<field name="is_favorite" widget="boolean_favorite" nolabel="1"/>
<field name="active" widget="boolean_toggle"/>

Image and Binary Widgets

WidgetField TypeDescription
imageBinaryImage display with upload
binaryBinaryFile upload/download
pdf_viewerBinaryInline PDF viewer
colorIntegerColor index picker (0-11)
color_pickerCharHex color picker
<field name="image_1920" widget="image" class="oe_avatar"/>
<field name="attachment" widget="binary" filename="attachment_name"/>
<field name="color" widget="color"/>

Special Widgets

WidgetField TypeDescription
domainCharVisual domain builder
aceTextCode editor (syntax highlighting)
handleIntegerDrag handle for reordering
badgeSelection/CharColored badge display
label_selectionSelectionColored label
statinfoInteger/FloatStat button display
<field name="domain" widget="domain" options="{'model': 'res.partner'}"/>
<field name="code" widget="ace" options="{'mode': 'python'}"/>
<field name="sequence" widget="handle"/>
<button class="oe_stat_button" icon="fa-envelope">
    <field name="message_count" widget="statinfo" string="Messages"/>
</button>

Widget Options

Many widgets accept options via the options attribute in JSON format:

<!-- Many2many tags with colors -->
<field name="tag_ids" widget="many2many_tags"
       options="{'color_field': 'color', 'no_create': True}"/>

<!-- Many2one with no create/edit -->
<field name="partner_id"
       options="{'no_create': True, 'no_create_edit': True, 'no_open': True}"/>

<!-- Image with size limit -->
<field name="image" widget="image"
       options="{'size': [200, 200], 'preview_image': 'image_128'}"/>

Tips for Choosing Widgets

  • Use statusbar for workflow states — it shows the progression visually
  • Use many2many_tags for tags and labels — much better UX than a list
  • Use monetary for all currency fields — it handles formatting and currency symbols
  • Use remaining_days for deadline fields — instantly shows urgency
  • Use boolean_toggle instead of raw checkbox for better mobile UX
  • Use CopyClipboardChar for API keys, URLs, and reference codes