Odoo developer reference
Odoo Widgets Reference
313 widgets documented. What each widget does, how to enable it in Studio with no code, and every developer option — verified against the Odoo source.
Upgrading? See every Odoo 20 change, app by app.
- 313Widgets documented
- 19Categories to browse
- No codeStudio setup for each widget
- Source-verifiedEvery developer option
Core / Web
67 widgets- CopyClipboardButtonOdoo CopyClipboardButton Widget: Copy Without ShowingchartextOf Odoo's three clipboard widgets,
CopyClipboardButtonis the only one that hides the value: just a button that puts the field's content on the clipboard, and nothing at all when the field is empty.Read the guide 3 uses in core - CopyClipboardCharOdoo Copy to Clipboard Widget (CopyClipboardChar) GuidecharOne of the only CamelCase widget names in Odoo core: CopyClipboardChar puts a one-click copy button next to a text value. Small widget, several sharp edges.Read the guide 15 uses in core
- CopyClipboardURLOdoo CopyClipboardURL Widget: Copy Link ButtonscharShare links, webhook endpoints, portal URLs:
CopyClipboardURLrenders a char field as a clickable link with a one-click copy button, and its name is one of the few in Odoo where capitalization matters.Read the guide 6 uses in core - account_json_checkboxesOdoo account_json_checkboxes: Checkbox Groups from JSONjsonThe checkbox rows on Odoo's invoice Send wizard are not boolean fields: account_json_checkboxes renders a whole JSON dict as a group of checkboxes, each with its own label, lock and help icon.Read the guide 2 uses in core
- attachment_imageOdoo attachment_image Widget: Kanban Cover Imagesmany2oneThe picture on a project task's kanban card is not a binary field. It is
attachment_image: a tiny display-only widget that turns a many2one to ir.attachment into a 300x300 image.Read the guide 3 uses in core - badgeOdoo Badge Widget: Colored Status Pills in Lists & Formsselectionmany2onecharThe
badgewidget renders a field's value as a colored pill, and its color comes from decoration expressions you write in the view or an integer color field on the record.Read the guide 99 uses in core - base_automation_actions_one2manyOdoo base_automation_actions_one2many Widget: Actions That Fitone2manyA rule's actions shown as one horizontal strip that measures itself against the available width and hides what does not fit behind an and 3 more counter.Read the guide 1 uses in core
- base_automation_trigger_selectionOdoo base_automation_trigger_selection Widget: Grouped TriggersselectionThe trigger dropdown on an automation rule, grouped into six headings and filtered against the model you picked. Choose a model with no stage field and the stage triggers are simply not offered.Read the guide 1 uses in core
- binaryOdoo Binary Widget: File Upload Field, Options & FilenamebinaryThe default upload and download control for every binary field in Odoo. Its behavior is simple; the
filenamewiring around it is where implementations go wrong.Read the guide 15 uses in core - binary_spreadsheetOdoo binary_spreadsheet Widget: A Download Button That Does NotbinaryThe binary field widget with the download deliberately removed, twice over: once in the template and once in the handler. The value it holds is not a file anyone can usefully open.Read the guide 1 uses in core
- booleanOdoo Checkbox Field (boolean): How It Works & When to Swap ItbooleanThe default Checkbox for every boolean field in Odoo: what the bare
booleanwidget does, why it never hides, and when to trade it for a toggle, star, or favorite variant.Read the guide 4 uses in core - boolean_favoriteOdoo boolean_favorite Widget: The Favorite Star FieldbooleanThe clickable star on products, journals and applicants. The boolean_favorite widget looks like a toggle and behaves like a save button, which is exactly what teams need to know before adopting it.Read the guide 14 uses in core
- boolean_iconOdoo boolean_icon Widget: A Boolean as a Single IconbooleanA boolean drawn as a single icon rather than a checkbox or a switch. One option changes the glyph, and the label comes from the field's own string.Read the guide 1 uses in core
- boolean_toggleOdoo boolean_toggle Widget: Switches That Save InstantlybooleanThe
boolean_togglewidget renders a boolean as a switch, and by default a flip saves the record immediately. That one behavior is most of what you need to know about it.Read the guide 66 uses in core - charOdoo char Widget: The Default Single Line Text FieldchartextThe default renderer for every text field in Odoo, and the base a dozen other widgets extend. It declares one option and quietly accepts three more.Read the guide 1 uses in core
- codeOdoo code Widget (Ace Editor): Syntax-Highlighted FieldstexthtmlOne widget, two names:
codeandaceare the same registered descriptor that swaps a plain textarea for a real Ace editor with syntax highlighting, dark mode, and careful save semantics.Read the guide 3 uses in core - colorOdoo color Widget: Hex Color Field GuidecharThe
colorwidget turns a plain char field into a native color swatch storing #RRGGBB. Its one option,autosave, is already on in list and kanban views, and Odoo 20 removes it.Read the guide 25 uses in core - color_pickerOdoo color_picker Widget: The 12-Color Palette FieldintegerThe
color_pickerwidget edits the integer 0 to 11 behind Odoo's standard palette, the same twelve colors tags, badges and kanban cards read.Read the guide 54 uses in core - contact_imageOdoo contact_image Widget: The Contact Photo Uploaderbinarymany2oneNew in Odoo 19: the photo frame on contact and user forms is its own widget.
contact_imageextends the image field with one trick, when the photo is empty it shows the record's generated avatar and a centered Add Photo button.Read the guide 3 uses in core - dashboard_graphOdoo dashboard_graph Widget: Kanban Sparkline ChartstextThe little line and bar charts on Odoo's accounting dashboard are a text field and a Chart.js canvas. One attribute decides which chart you get, and there is no third option.Read the guide 1 uses in core
- domainOdoo Domain Widget: Filter Builder Field, Options & ModelchartextThe point-and-click filter builder behind automation rules, mailing lists and reordering rules. The domain widget turns a char field into Odoo's condition editor, live record count included.Read the guide 15 uses in core
- emailOdoo Email Widget: mailto Links in Forms and ListscharThe
emailwidget makes addresses actionable: amailto:link in lists, an envelope button on forms. What it deliberately does not do, validate addresses beyond the browser's loose check, is just as important to know.Read the guide 17 uses in core - field_selectorOdoo field_selector Widget: Pick a Field Path, Relations IncludedcharThe field selector puts Odoo's field-path picker on a char field: users browse a model's fields, drill through relations like
partner_id.country_id.code, and the dotted path is what gets stored.Read the guide 9 uses in core - filterable_selectionOdoo filterable_selection Widget: Hide Selection Values Per Viewselectionmany2oneOne selection field, different choices per view:
filterable_selectionfilters a selection's dropdown with a whitelist, a blacklist, or a list read live from another field on the record, without touching the model.Read the guide 5 uses in core - floatOdoo Float Widget: Decimal Field Options and FormattingfloatmonetaryEvery decimal number in Odoo passes through the
floatwidget. Its option panel hides a naming trap, and since 19.0 the input quietly evaluates math. Here is the full, source-verified picture.Read the guide 7 uses in core - float_timeOdoo float_time Widget: Show Hours as HH:MMfloatThe
float_timewidget displays a float of hours as clock-style time: 8.5 renders as 08:30. Storage stays a plain float, so sums and reports keep working.Read the guide 146 uses in core - gaugeOdoo Gauge Widget: Options, the max_field Trap & UsesintegerfloatThe gauge widget turns an integer or float into a half-doughnut Chart.js gauge, mostly on kanban dashboards. Its most important fact is a naming bug: the declared
max_value_fieldoption is dead, andmax_fieldis the one that works.Read the guide 2 uses in core - google_slide_viewerOdoo google_slide_viewer Widget: Embed a Google Slides DeckchartextPaste a Google Docs link into a text field and get the deck embedded on the form. The URL is rewritten by a regular expression, and the starting page comes from a companion field named by convention.Read the guide 1 uses in core
- handleOdoo Handle Widget: Drag-and-Drop Row ReorderingintegerThe drag dots on the left of Odoo list rows are the
handlewidget. It has no options at all; everything that matters happens in the sequence field underneath it.Read the guide 155 uses in core - htmlOdoo html Widget: The Rich Text Editor FieldhtmlThe HTML field is Odoo's rich text editor: checklists, tables, images, slash commands. Under the hood it is two widgets wearing one name, and its options live nowhere in the documentation.Read the guide 9 uses in core
- iframe_wrapperOdoo iframe_wrapper Widget: Raw HTML in Its Own FrametexthtmlFor HTML that is a whole document rather than a fragment: styles, head metadata, the lot. It writes the value straight into an iframe, and the source explains at length why.Read the guide 1 uses in core
- imageOdoo Image Widget: Upload, Resize, Zoom & WebPbinarymany2oneThe
imagewidget displays and uploads pictures on binary fields, with more options than any other display widget, including a WebP pipeline that quietly generates five sizes per upload.Read the guide 92 uses in core - image_urlOdoo image_url Widget: Show Images You Never Storedchar
image_urlrenders a plain char field as an image, fetched by the browser straight from the URL it contains. Nothing is downloaded or stored server side, which is exactly its power and its caveat.Read the guide 4 uses in core - integerOdoo Integer Widget: Options, Formatting & Typed MathintegerThe Integer field widget is the default editor for whole numbers in Odoo. Behind the plain input sit formatting toggles, two undocumented options, relative typed math, and a placeholder that quietly stopped working in 19.Read the guide 2 uses in core
- kanban_color_pickerOdoo kanban_color_picker Widget: Kanban Card ColorsintegerThe color palette inside a kanban card's dropdown menu is one widget:
kanban_color_picker. Zero options, one strong opinion: picking a color saves immediately.Read the guide 26 uses in core - label_selectionOdoo Label Selection Widget: Colored Status LabelsselectionPaid in green, Cancelled in red:
label_selectionpaints a selection value as a colored label using one option,classes, a plain mapping from value to color. It displays; it never edits.Read the guide 16 uses in core - many2manyOdoo many2many Widget: The Embedded Relational Tablemany2manyone2manyThe default face of a many2many field is an embedded table of linked records with an Add line that opens a selection dialog. Less known: writing
widget="many2many"on a one2many field flips it into link and unlink mode, a trick Odoo core itself uses.Read the guide 4 uses in core - many2many_binaryOdoo many2many_binary Widget: Multi File Upload Fieldmany2manySeveral files on one record, uploaded in one go: the many2many_binary widget turns a many2many to
ir.attachmentinto Odoo's multi file upload zone.Read the guide 13 uses in core - many2many_checkboxesOdoo many2many_checkboxes: Every Option as a Checkboxmany2manyThe Checkboxes field lists every record of a relation as a tickbox: no search, no create, the whole choice space visible at once. Ideal for short fixed sets like product routes.Read the guide 8 uses in core
- many2many_tagsOdoo Tags Field (many2many_tags): Setup, Colors & Usesmany2manyone2manyThe Odoo Tags field: what it does, how to set it up in Studio without code, and every option it supports.Read the guide 391 uses in core
- many2many_tags_avatarOdoo many2many_tags_avatar: Tags With Facesmany2manyone2manyThe avatar tags field renders people-type relations as pills with faces: each tag carries the record's avatar, and kanban cards get a quick-assign popover.Read the guide 10 uses in core
- many2oneOdoo many2one Widget: The Record Link Field Explainedmany2oneThe autocomplete dropdown on Customer, Product and every other record link in Odoo is the
many2onewidget. It is the default for its field type, which is why you rarely type its name, and why its options are worth knowing by heart.Read the guide 6 uses in core - many2one_avatarOdoo many2one_avatar Widget: Avatar Dropdown Guidemany2oneThe generic avatar dropdown: a standard many2one with the linked record's picture in front of its name. Same options as
many2one, plus one opening rule of its own.Read the guide 32 uses in core - many2one_barcodeOdoo many2one_barcode Widget: Scan to Fill a Many2onemany2one
many2one_barcodeis the smallest widget on this site with a real job: it is the standard many2one with the mobile barcode scanner permanently switched on, so warehouse and accounting users fill product fields by pointing a camera at a label.Read the guide 4 uses in core - monetaryOdoo Monetary Widget: Currency, Symbols & DecimalsmonetaryfloatintegerThe Monetary widget renders an amount with the record's currency symbol and precision. Most of its behavior comes from the currency, not the field, and that is where teams get surprised.Read the guide 182 uses in core
- one2manyOdoo one2many Widget: Embedded List Setup & Optionsone2manymany2manyOrder lines, BoM components, task checklists: the one2many widget is the embedded table Odoo runs on, and its options can do more than the documentation admits.Read the guide 12 uses in core
- pdf_viewerOdoo pdf_viewer Widget: A PDF Preview on the FormbinaryA stored PDF rendered inline instead of offered as a download. It hides the viewer's own download and print buttons, and it declares an option the code never actually reads.Read the guide 1 uses in core
- percentageOdoo Percentage Widget: Store 0.15, Show 15%floatintegerThe
percentagewidget shows a stored fraction as percent: 0.15 displays as 15%, and typing 15 stores 0.15. One convention, consistently applied on both directions.Read the guide 38 uses in core - percentpieOdoo percentpie Widget: The Circular Percentage GaugefloatintegerThe little circles on a mailing's statistics, Opened 54%, Clicked 12%, are
percentpie: a display-only widget that draws a number as a filled circle using nothing but a CSS conic-gradient.Read the guide 5 uses in core - phoneOdoo Phone Widget: Click to Call tel Links and SMScharPhone numbers in Odoo are plain char fields until the
phonewidget makes them callable: atel:link in lists, a Call button on forms, and, courtesy of thesmsmodule, an SMS button you can switch off.Read the guide 21 uses in core - priorityOdoo Priority Widget: Stars, Autosave & the Alt+R ShortcutselectionThe stars on tasks and leads are the
prioritywidget over a plain selection field. Clicking a star saves immediately, and clicking the current one clears it, both verified in the source.Read the guide 40 uses in core - progressbarOdoo progressbar Widget: Progress Bar Field GuideintegerfloatOdoo's Progress Bar widget: five options in 19, an undocumented numeric trick, and a development branch that quietly deletes most of them for Odoo 20.Read the guide 23 uses in core
- propertiesOdoo properties Widget: User-Defined Fields Without a DeveloperpropertiesThe Properties field lets end users bolt their own fields onto records, per project, per team, per parent, without Studio, without a developer, and without touching the database schema.Read the guide 9 uses in core
- radioOdoo Radio Widget: Show Every Option as a Buttonselectionmany2oneThe
radiowidget lays every choice of a selection or many2one field out as radio buttons, so users see all options before picking one.Read the guide 151 uses in core - referenceOdoo reference Widget: Pick a Model, Then a RecordreferencecharOne field, two questions: which model, then which record.
referenceis the widget behind that pair of inputs, and it accepts far more options than it admits to.Read the guide 1 uses in core - remaining_daysOdoo Remaining Days Widget (remaining_days) GuidedatedatetimeThe widget behind every Today, In 3 days and 2 days ago in Odoo. One undocumented option controls the colors, and Odoo 20 renames the whole widget.Read the guide 26 uses in core
- section_one2manyOdoo section_one2many Widget: One2many Lists with Section Rowsone2manyWorking schedules in Odoo show Morning and Afternoon as bold rows spanning the whole table. That layout is
section_one2many, a resource module one2many whose section rows are ordinary records withdisplay_type = 'line_section'and a hardcodedtitlefield.Read the guide 4 uses in core - selectionOdoo Selection Widget: Dropdown Setup, Options & Studiomany2oneselectionThe default dropdown behind every Selection field in Odoo, and the widget that turns a many2one into a closed list. How it works, what it hides, and where it trips teams up.Read the guide 15 uses in core
- selection_badgeOdoo Selection Badge Widget: Pill Buttons Instead of Dropdownsselectionmany2oneWhen every option should be visible and one click away,
selection_badgereplaces the dropdown with a row of pills. It also hides three behaviors nobody expects: a self-clearing click, a text-only readonly mode, and a full reload of many2one options.Read the guide 17 uses in core - state_selectionOdoo state_selection Widget: The Kanban State Traffic LightselectionThe small gray, red or green bullet on kanban cards and list rows is the
state_selectionwidget. It turns a three value selection field into a one click status dropdown, and its label behavior is stranger than the docs admit.Read the guide 5 uses in core - statinfoOdoo Stat Info Widget (statinfo): Smart Button Numbers Explainedfloatintegermonetary+3The number inside an Odoo smart button, such as 3 Invoices, is rendered by the
statinfowidget. Here is how it works, what it can show, and how to control its label and decimals.Read the guide 197 uses in core - statusbarOdoo Statusbar Widget: Pipeline Stages in the Form Headermany2oneselectionThe stage strip at the top of Odoo forms is the
statusbarwidget. It shows where the record stands, lets users click to move it, and hides two keyboard shortcuts almost nobody uses.Read the guide 67 uses in core - textOdoo Multiline Text Widget (text): Complete GuidetextcharhtmlOdoo's Multiline Text widget: the auto-growing textarea behind every notes box. Two documented options, two undocumented ones, and a quiet type change in Odoo 19.Read the guide 25 uses in core
- timezone_mismatchOdoo timezone_mismatch Widget: Spot the Wrong TimezoneselectionA timezone dropdown that checks itself against your browser and, when they disagree, prints the actual current time in the selected zone next to its name.Read the guide 1 uses in core
- tour_start_widgetOdoo tour_start_widget: Onboarding & Testing Tour ButtonschartextThe Onboarding and Testing buttons on Odoo's Tours screen are one widget:
tour_start_widget, a char field that never shows its value and instead launches the tour in manual or automated mode.Read the guide 2 uses in core - upgrade_booleanOdoo upgrade_boolean Widget: The Enterprise Upsell CheckboxbooleanThe settings checkboxes that open an upgrade popup on Community are one widget:
upgrade_boolean. On Enterprise it is an ordinary checkbox; on Community it can never stay checked.Read the guide 45 uses in core - urlOdoo URL Widget: Clickable Links with Custom TextcharThe
urlwidget turns a char field into a link that opens in a new tab, quietly prefixeshttp://when the scheme is missing, and hides one of Odoo's least known tricks: atextattribute that replaces the visible URL with friendly link text.Read the guide 18 uses in core
Website / Marketing
21 widgets- CopyClipboardJobLinkButtonOdoo CopyClipboardJobLinkButton Widget: Copy a Job LinkcharA copy button for a job posting's link, with a notification confirming the copy rather than a silent state change.Read the guide 1 uses in core
- EventMailTemplateReferenceFieldOdoo EventMailTemplateReferenceField: Event Template PickerreferencecharThe template picker on Odoo's event communication lines is a tuned
referencewidget:EventMailTemplateReferenceFieldpreselects the first template model, marks mail templates with an envelope, and refuses to open records from readonly rows.Read the guide 4 uses in core - boolean_phoneOdoo boolean_phone Widget: The In-Call IndicatorbooleanNew in Odoo 19, boolean_phone is the smallest kind of widget: a boolean that renders a phone icon when true and nothing at all when false, built to show which livechat agents are currently in a call.Read the guide 2 uses in core
- char_emojisOdoo char_emojis Widget: Emoji Picker for Char FieldschartextThe char_emojis widget is a standard single-line text input with one addition: an emoji button that opens Odoo's full emoji picker and inserts the chosen emoji at the cursor.Read the guide 2 uses in core
- chatbot_steps_one2manyOdoo chatbot_steps_one2many Widget: Chain Chatbot Stepsone2manyThe steps list in Odoo's chatbot builder. Saving the whole script after every step sounds heavy-handed until you try building a script without it.Read the guide 1 uses in core
- chatbot_triggering_answers_widgetOdoo chatbot_triggering_answers_widget: Answers From This Scriptmany2manyTags for the answers that trigger a chatbot step, filtered to the script you are editing. It does that by writing into the user's own context, which is an unusually blunt way to pass a filter.Read the guide 1 uses in core
- event_icon_selectionOdoo event_icon_selection Widget: Values as Iconschartextselection
event_icon_selectionturns a field's value into an icon, and its configuration is unlike any other widget on this site: theoptionsdictionary itself is the icon map, with every key you write becoming a supported value.Read the guide 2 uses in core - event_state_selectionOdoo event_state_selection Widget: Event Kanban State with CancelselectionEvents in Odoo carry a fourth kanban state, Cancelled, and
event_state_selectionis the widget built around it: icon-based states in a fixed order, a divider isolating the cancel action, and one surprising omission inherited from how it skips its parent's setup.Read the guide 2 uses in core - im_livechat.rating_percentageOdoo im_livechat.rating_percentage: The Rating FormatterintegerfloatUnusual entry in the widget inventory:
im_livechat.rating_percentageis not a field widget at all. It is a formatter that turns Livechat's 1 to 5 rating scale into a 0 to 100 percentage inside pivot and graph reports.Read the guide 6 uses in core - image_radioOdoo image_radio Widget: Pick a Layout From PicturesselectionA selection field rendered as clickable pictures. The images are matched to values by position, and the radio group has a hardcoded name, which is where both of its failure modes come from.Read the guide 1 uses in core
- mailing_filterOdoo mailing_filter Widget: Save a Recipient Filtermany2oneA relation picker with two extra icons: save the current recipient domain as a favorite, or drop the one you loaded. On the Odoo 20 development branch the whole idea is replaced.Read the guide 1 uses in core
- mass_mailing_htmlOdoo mass_mailing_html Widget: The Mailing Design SurfacehtmlThe email designer inside Odoo: themes, snippets, an iframe preview and a code view. It is the rich text editor with several features deliberately switched off, because email is not the web.Read the guide 1 uses in core
- slide_category_one2manyOdoo slide_category_one2many Widget: Course Sectionsone2manymany2manyThe content tab of an eLearning course is one relation pretending to be two: sections and lessons. This widget is the renderer that keeps them apart.Read the guide 1 uses in core
- stat_infoOdoo stat_info Widget: A Name That Never ResolvesOne core view writes
widget="stat_info"on a stat button. Nothing registers that name, and a button would not look it up even if something did. Two reasons for the same outcome: nothing happens.Read the guide 1 uses in core - text_emojisOdoo text_emojis Widget: An Emoji Picker on a Text FieldtextcharThe multi-line text field with an emoji button attached. Small feature, and the only reason it exists is that social and marketing copy without emoji reads like a memo.Read the guide 1 uses in core
- video_previewOdoo video_preview Widget: Product Video Embeds ExplainedhtmlThe live video preview in Odoo's product media dialog is
video_preview: a field widget that trusts a server-computed embed and simply frames it 16:9. All the intelligence, and all the platform support, lives server side.Read the guide 1 uses in core - website_publish_buttonOdoo website_publish_button Widget: Publish State LabelbooleanThe Published smart button that turns into red Unpublish when you hover it is two parts: a server method and this widget.
website_publish_buttonrenders the label; it toggles nothing itself.Read the guide 2 uses in core - website_redirect_buttonOdoo website_redirect_button Widget: Published Status ButtonbooleanThe website redirect button turns the
is_publishedflag into a header button that reads Published or Unpublished and jumps straight to the record's public page.Read the guide 11 uses in core - website_urlsOdoo website_urls Widget: A Name With No Widget Behind ItcharOne core view asks for
widget="website_urls". Nothing in Odoo registers that name, in any version we checked. The field still renders, and this page explains exactly why.Read the guide 1 uses in core - x2_many_imageOdoo x2_many_image Widget: Product Image and Video Cardsbinarymany2oneThe image tile in Odoo's product media kanban is not the plain
imagewidget.x2_many_imageswaps the file picker for the media dialog, and quietly disables three inherited options while doing it.Read the guide 1 uses in core - x2_many_media_viewerOdoo x2_many_media_viewer: Product Media Galleriesone2manymany2manyThe Add Media gallery on eCommerce products is a one2many wearing a media manager.
x2_many_media_viewerswaps the usual Add row for Odoo's image and video dialog, and can transcode every upload to WebP.Read the guide 2 uses in core
Accounting / Localization
39 widgets- PaymentWizardCopyClipboardButtonFieldOdoo PaymentWizardCopyClipboardButtonField: Copy After SavechartextThe Copy button on a payment link, with one addition: it waits for the record to finish updating before it copies. Without that, a fast click copies the previous link.Read the guide 1 uses in core
- account-tax-totals-fieldOdoo account-tax-totals-field Widget: The Invoice Totals BlockjsonThe untaxed, tax and total block at the bottom right of every Odoo invoice is one widget:
account-tax-totals-field. It renders a JSON payload, and it quietly lets you type over a computed tax amount.Read the guide 3 uses in core - account_batch_sending_summaryOdoo account_batch_sending_summary Widget: Send PreviewjsonBefore Odoo sends fifty invoices, it tells you how each one will go out. This widget is the read-only panel that shows that answer, and it reads the value exactly once.Read the guide 1 uses in core
- account_document_stateOdoo account_document_state: E-Invoicing Status + Popoverselectionmany2oneGovernment e-invoicing replies rarely fit in a status column.
account_document_staterenders the selection state and, whenever the record carries amessage, adds an info icon whose popover shows the full text with a copy button.Read the guide 2 uses in core - account_merge_wizard_lines_one2manyOdoo account_merge_wizard_lines_one2many Widget Explainedone2manyMerging duplicate accounts means reading groups of candidates and ticking the ones to keep. This widget is the sectioned list that makes those groups legible, down to keeping one column deliberately visible.Read the guide 1 uses in core
- account_move_statusbar_securedOdoo account_move_statusbar_secured Widget: The Lock IconselectionA padlock next to Posted, green when the entry is hash-secured and orange when it is not. One inherited status bar, three template edits, and an audit story you can see at a glance.Read the guide 1 uses in core
- account_payment_register_htmlOdoo account_payment_register_html Widget: Installment SwitchhtmlThe line of text in the Register Payment wizard that offers to pay just the installment instead. It is server-generated HTML with one clickable class, and Odoo 19 threw away the editor it used to run through.Read the guide 1 uses in core
- account_resequence_widgetOdoo account_resequence_widget: Preview a RenumberingtextRenumbering posted journal entries is not something you want to guess at. This widget draws the before and after list so the wizard can be read before it is run.Read the guide 1 uses in core
- account_tax_repartition_line_factor_percentOdoo account_tax_repartition_line_factor_percent WidgetfloatTax distributions sometimes have to be a third of something. This widget keeps twelve decimals so the arithmetic survives, then hides the trailing zeros so the screen stays readable.Read the guide 1 uses in core
- account_type_selectionOdoo account_type_selection Widget: Grouped Account TypesselectionThe Type dropdown on an Odoo account is not a flat list. The
account_type_selectionwidget buckets every account type under Balance Sheet and Profit & Loss headings so accountants pick from a structured tree instead of a 15 item flat list.Read the guide 3 uses in core - actionable_errorsOdoo actionable_errors Widget: Validation Alerts With Fix ButtonsjsonThe actionable errors widget turns a computed JSON field into a stack of ranked alert boxes, each with a button that jumps the user straight to the fix.Read the guide 11 uses in core
- analytic_distributionOdoo analytic_distribution Widget: Options & SetupjsonThe field that splits a journal item across analytic accounts by percentage is one widget:
analytic_distribution. Eight options, a tag-based editor, and a type change in 19 worth knowing about.Read the guide 22 uses in core - auto_save_res_partnerOdoo auto_save_res_partner Widget: Save Before Addingone2manymany2manyA child list that saves its parent before letting you add a row. Seven lines of code for a problem that otherwise produces confusing errors on brand new contacts.Read the guide 1 uses in core
- autosave_many2many_tax_tagsOdoo autosave_many2many_tax_tags Widget: Taxes That Save Themselvesmany2manyTaxes on a journal entry line are not just a value, they generate other lines. This widget saves the whole entry the moment they change, so the tax lines appear immediately instead of at the end.Read the guide 1 uses in core
- char_with_placeholder_fieldOdoo char_with_placeholder_field Widget ExplainedchartextA char field that never looks empty:
char_with_placeholder_fieldshows the placeholder as a muted value, so users see the default Odoo will apply before it is applied.Read the guide 7 uses in core - confirm_booleanOdoo confirm_boolean Widget: A Toggle That Asks FirstbooleanA switch that stops and asks before it loses data. It only asks in one direction, and once you confirm it saves straight away rather than waiting for the form.Read the guide 1 uses in core
- dynamic_selectionOdoo Dynamic Selection Widget: Dropdowns That Filter ThemselvesselectionA selection field always offers every value it declares, unless you render it with
dynamic_selection, the small account-module widget that shows only the options another field on the record allows. Odoo's e-invoicing localizations run on it.Read the guide 19 uses in core - grouped_view_widgetOdoo grouped_view_widget: JSON Preview Tables in WizardstextThe grouped_view_widget renders a read-only, grouped table from a JSON string, and it is how the Accrued Orders wizard shows you the entries it is about to book before you commit.Read the guide 2 uses in core
- l10n_in_hsn_autocompleteOdoo l10n_in_hsn_autocomplete Widget: Live HSN LookupchartextType three characters and Odoo asks India's GST portal for matching HSN codes. The request goes from the user's browser, not from your server, and that has consequences worth knowing before you deploy it.Read the guide 1 uses in core
- line_open_move_widgetOdoo line_open_move_widget: Analytic Lines to Journal Entriesmany2oneA many2one field whose internal-link arrow does not open the record you expect, on purpose: line_open_move_widget routes analytic lines to the journal item's real business document.Read the guide 2 uses in core
- list_activityOdoo List Activity Widget (list_activity): Activities in List Viewsone2manyThe Next Activity column in Odoo list views, the little clock with a summary next to it, is the
list_activitywidget. It has no options at all; everything it shows comes from six activity fields it loads for you.Read the guide 21 uses in core - mail_attachmentsOdoo mail_attachments Widget: Files on the Send WizardjsonThe attachment list on Odoo's invoice send wizard. It knows the difference between a file you added, a file the system generated, and a file that must not be deleted, and it cleans up after itself when you close the wizard.Read the guide 1 uses in core
- mail_attachments_selectorOdoo mail_attachments_selector Widget: Add Files to a SendjsonThe upload control on Odoo's document send wizard. It routes files through the messaging layer rather than creating attachments directly, and every file it adds is marked so it can be cleaned up later.Read the guide 1 uses in core
- mail_composer_template_selectorOdoo mail_composer_template_selector Widget: Template Pickermany2oneThe small three dot Templates button in Odoo's email composer footer is the
mail_composer_template_selectorwidget. It loads your templates first, shared ones second, and quietly hides its management entries when a context key says so.Read the guide 3 uses in core - many2many_tags_banksOdoo many2many_tags_banks Widget: Bank Accounts as Tagsmany2manyone2manyPartner bank accounts rendered as tags, each showing whether outgoing payments are allowed. It also saves the partner behind your back, and there is a good reason for that.Read the guide 1 uses in core
- many2many_tags_journalsOdoo many2many_tags_journals Widget: Multi-Company Journal Tagsmany2manyThe many2many_tags_journals widget is the Tags field with one accounting-specific trick: when a Multi-ledger group belongs to no company, every journal pill spells out which company it comes from.Read the guide 2 uses in core
- many2many_tax_tagsOdoo many2many_tax_tags: Tax Grid Tags on Journal Itemsmany2manyone2many
many2many_tax_tagsis the tags widget tuned for accounting: identical options, one deliberate change, the dropdown always offers Search More, because tax grids are long and picking the wrong one is a filing error.Read the guide 35 uses in core - many2one_account_accountOdoo many2one_account_account Widget: Smarter Account Searchmany2onePicking an account is the most repeated action in Odoo accounting. This widget makes one change to the dropdown: it stops offering Search more unless you typed a number.Read the guide 1 uses in core
- nemhandel_verification_codeOdoo nemhandel_verification_code Widget: Six Boxes for an SMS CodecharSix single character boxes for the code sent by SMS, with focus that moves as you type and a paste handler that fills the rest from wherever you started.Read the guide 1 uses in core
- open_decimal_precision_buttonOdoo open_decimal_precision_button Widget: Discard and RedirectanyA field that is not really a field: a button in a warning panel that throws away your unsaved currency change and sends you to the setting you actually wanted.Read the guide 1 uses in core
- open_move_widgetOdoo open_move_widget: Journal Entry Links in Item ListscharThe open_move_widget turns the Journal Entry number in an items list into a link that jumps straight to the entry's best business view, an invoice, a payment or the raw journal entry.Read the guide 2 uses in core
- paymentOdoo payment Widget: Paid On, Outstanding Credits & UnreconcilebinaryEvery Paid on line and every Outstanding credits box on an Odoo invoice is one widget: payment, a JSON-driven display with two faces, an info popover, and an Unreconcile button.Read the guide 2 uses in core
- payment_term_line_idsOdoo payment_term_line_ids Widget: Rows That Stay Putone2manymany2manySixteen lines of code to fix one annoyance: a new payment term line vanishing because the user clicked somewhere else before typing anything.Read the guide 1 uses in core
- peppol_non_focusable_selectionOdoo peppol_non_focusable_selection Widget ExplainedselectionA selection widget whose entire purpose is to not take focus. One attribute changed in an inherited template, so the Peppol registration form can put the cursor where a user actually types.Read the guide 1 uses in core
- product_label_section_and_note_fieldOdoo product_label_section_and_note_field Widget Explainedmany2oneOn an Odoo invoice line the Product column secretly edits two fields at once: the
product_idmany2one and the line description. Theproduct_label_section_and_note_fieldwidget is what stitches them together, and it also styles section, subsection and note lines.Read the guide 3 uses in core - product_label_section_and_note_field_o2mOdoo product_label_section_and_note_field_o2m: Invoice Lines Gridone2manyThe one2many widget that renders invoice and bill lines in Odoo 19: sections, notes, merged product labels, and a column layout that reconfigures itself depending on document type.Read the guide 2 uses in core
- receipt_selectorOdoo receipt_selector Widget: Invoice or ReceiptselectionThe small Invoice or Receipt toggle at the top of a journal entry. It rewrites its own labels, filters its own choices, and disappears entirely unless your database has sales receipts turned on.Read the guide 1 uses in core
- section_and_note_textOdoo section_and_note_text Widget: Section & Note LineschartextOn sale orders and invoices, one widget decides how the description cell edits:
section_and_note_text, a tiny dispatcher that reads the line'sdisplay_type. The Odoo 20 branch removes it.Read the guide 6 uses in core - x2many_buttonsOdoo x2many_buttons Widget: Related Records as Link Buttonsmany2manyone2manyThe x2many buttons widget renders a relation as a short row of clickable record buttons. It powers the "this document might be a duplicate of" banner on invoices.Read the guide 11 uses in core
Human Resources
38 widgets- RecruitmentCopyClipboardCharOdoo RecruitmentCopyClipboardChar Widget ExplainedcharNew in Odoo 19, RecruitmentCopyClipboardChar is a copy-to-clipboard field with a twist: instead of copying what is stored, it can call a server method at click time and copy whatever that returns, which is how recruitment source aliases are created on demand.Read the guide 2 uses in core
- accrual_levelsOdoo accrual_levels Widget: The Milestone Timelineone2manyAccrual plans are the hardest thing to configure in Odoo Time Off, so Odoo stopped showing them as a list.
accrual_levelsdraws them as a timeline you read like a sentence.Read the guide 1 uses in core - applicant_charOdoo applicant_char Widget: A Name That Opens the ApplicantchartextA text cell that is also a link. On the attachments list it shows which applicant a CV belongs to and takes you there, without needing the field to be a relation.Read the guide 1 uses in core
- applicant_line_many2manyOdoo applicant_line_many2many Widget: Job Before the Namemany2manyApplicant tags with the job position in front of the name. On a refusal wizard covering several vacancies, that prefix is the difference between knowing who you are rejecting and guessing.Read the guide 1 uses in core
- background_imageOdoo background_image Widget: Display-Only Employee Imagesbinarymany2oneThe large employee photo panel in Odoo HR is not the standard image widget:
background_imageinherits every image option but swaps the template for a bare, display-only<img>with no upload or delete controls.Read the guide 6 uses in core - boolean_radioOdoo boolean_radio Widget: Yes/No Radios, Labels from the ViewbooleanNew in Odoo 19:
boolean_radioshows a boolean as two radio buttons whose labels are full translatable sentences harvested from elements in the same view. Skip either option and the widget refuses to mount.Read the guide 2 uses in core - boolean_toggle_loadOdoo boolean_toggle_load Widget: A Toggle That Flags Its Own ChangebooleanA list toggle that writes two fields instead of one. The second is a technical flag telling the server which level triggered the change, which its own comment explains.Read the guide 1 uses in core
- checkboxOdoo checkbox Widget: The Missing Widget That Still WorksbooleanOdoo 19's own views write
widget="checkbox", yet no such widget exists in the registry. This page explains the Missing widget console warning, the fallback that renders anyway, and what to use instead.Read the guide 2 uses in core - daterangeOdoo Date Range Widget (daterange): One Field, Two DatesdatedatetimeTime off requests, events and planned tasks all edit two dates in one calendar popover. That is the
daterangewidget: one field element, a paired date field, and more options than any other date widget in Odoo.Read the guide 21 uses in core - datetimeOdoo Datetime Widget: Date & Time Field OptionsdatetimeThe
datetimewidget renders every Date & Time field in Odoo. It is one of the rare widgets Studio exposes almost completely, and it hides an undocumented range-pairing ability.Read the guide 7 uses in core - day_selectionOdoo day_selection Widget: Month-Aware Day DropdownsselectionIn time off accrual plans, Odoo lets you say on the 30th of April but never on the 31st. That guard is
day_selection, anhr_holidayswidget that trims a day dropdown to the days its companion month actually has.Read the guide 4 uses in core - float_time_selectionOdoo float_time_selection Widget: Clock Picker for FloatsfloatTime off "custom hours" in Odoo use
float_time_selection: a float field dressed as a clock time, with an hour and minute dropdown popover and locale-aware display.Read the guide 6 uses in core - float_without_trailing_zerosOdoo float_without_trailing_zeros: Clean Numbers in SentencesfloatmonetaryOdoo's accrual plans say "1 day", not "1.00 days".
float_without_trailing_zerosdoes that trimming with one regex, and since Odoo 19 the core float widget can nearly replace it.Read the guide 3 uses in core - formatted_dateOdoo formatted_date Widget: Custom Date Labels in ListsdateNew in Odoo 19,
formatted_dateis a display-only date widget with per-view format control: month names instead of numbers, conditional colors from record data, and the label Indefinite when the date is empty.Read the guide 6 uses in core - hr_applicant_state_selectionOdoo hr_applicant_state_selection Widget: Applicant Kanban StateselectionThe colored state bullet on an Odoo recruitment applicant is not the standard
state_selectionwidget.hr_applicant_state_selectionexists becausehr.applicantcarries a fourth kanban state, Waiting, that needed its own color.Read the guide 2 uses in core - hr_holidays_radio_imageOdoo hr_holidays_radio_image Widget: Time Off Iconsmany2oneselectionThe little row of illustrations on a Time Off type is a radio group in disguise. It builds each image path from the option's own label, and it is gone on the Odoo 20 development branch.Read the guide 1 uses in core
- hr_homeworking_radio_imageOdoo hr_homeworking_radio_image Widget: Work Location IconsselectionThe building, house and map-marker radios on Odoo's work location form are
hr_homeworking_radio_image, a radio widget whose template only knows three hardcoded values, ignores its own inherited option, and disappears entirely in the Odoo 20 branch.Read the guide 2 uses in core - hr_org_chartOdoo hr_org_chart Widget: The Employee Org Chart ExplainedanyThe organization chart on every Odoo employee form is one field widget:
hr_org_chart. It ignores the field it sits on, calls its own controller, and caps the manager chain at five levels because of a one-line source comment.Read the guide 2 uses in core - hr_presence_statusOdoo hr_presence_status Widget: The Employee Presence DotselectionThe colored dot next to every employee, green for present, hollow for archived, a plane when on leave, is
hr_presence_status. One tiny widget, layered by three modules, with a pill-shaped form variant that is new in Odoo 19.Read the guide 6 uses in core - many2many_avatar_employeeOdoo many2many_avatar_employee: Employee Avatar Pillsmany2manyEmployee pickers in Odoo HR render as avatar pills through
many2many_avatar_employee, a widget whose defining trick is deciding which employee model you are really looking at.Read the guide 3 uses in core - many2many_avatar_employee_classOdoo many2many_avatar_employee_class Widget: Flagged Employeesmany2manyEmployee avatars with some of them flagged. It exists for one wizard, it takes its list of problem employees from a field you name, and on the development branch both the wizard and the widget are gone.Read the guide 1 uses in core
- many2many_tags_salary_bankOdoo many2many_tags_salary_bank Widget: Salary Split Bank Tagsmany2manyOn the employee form, bank account tags can read (30%) BNP Paribas ...1234. That prefix is
many2many_tags_salary_bank, a tags widget that annotates each account with its salary split and quietly saves your whole form when you close a tag's dialog.Read the guide 2 uses in core - many2many_tags_skillsOdoo many2many_tags_skills Widget: Skills With Their Default Levelmany2manySkills rendered as tags that also carry whether the level is the default one. The extra data is injected rather than requested, so the view stays simple.Read the guide 1 uses in core
- many2one_avatar_employeeOdoo many2one_avatar_employee: Employee Fields with Photosmany2oneThe employee picker with a photo:
many2one_avatar_employeerenders an employee link as an avatar, and quietly enforces HR privacy by switching the model it reads based on the user's rights.Read the guide 59 uses in core - many2one_tags_skillsOdoo many2one_tags_skills Widget: A Child List Rendered as Tagsone2manyA one-to-many rendered as clickable tags, with its own Select Skills dialog. Its registered name says many2one, its class says one2many, and the class is right.Read the guide 1 uses in core
- many2one_work_entry_typeOdoo many2one_work_entry_type Widget: Coded Work Entry Pickermany2oneIn payroll's work entry views, every type shows a small colored code chip (ATT, OT, SL) in front of its name. That chip is
many2one_work_entry_type, anhr_work_entrywidget that fetches and renders the type's short code and calendar color everywhere, dropdown included.Read the guide 4 uses in core - nb_attachmentOdoo nb_attachment Widget: The Expense Receipt CounterintegerA number and a paperclip: how many receipts are attached to an expense. Fifteen lines of code, and one detail worth knowing about when the number updates.Read the guide 1 uses in core
- project_task_progressbarOdoo project_task_progressbar: The Self-Coloring Task BarfloatintegerThe bar that shifts from green to orange to red as a task eats its allocated hours is
project_task_progressbar: a fork of the standard progress bar that multiplies by 100 and colors itself by fixed thresholds.Read the guide 5 uses in core - radio_followed_by_elementOdoo radio_followed_by_element: Radios with Inline Inputsselectionmany2oneNew in Odoo 19:
radio_followed_by_elementphysically moves other form elements so they sit inline after a chosen radio option. It powers the accrual plan sentences in Time Off, and it is the most DOM-invasive field widget in core.Read the guide 3 uses in core - resume_one2manyOdoo resume_one2many Widget: The Employee Resume Timelineone2manyThe Resume block on an Odoo employee form, with its timeline dots, date ranges and grouped experience types, is
resume_one2many. It is a heavily customized one2many renderer with a hardcoded grouping and one genuine rendering bug that Odoo 20 fixes.Read the guide 2 uses in core - skill_match_gauge_fieldOdoo skill_match_gauge_field: The Candidate Match GaugeintegerNew in Odoo 19 Recruitment: the half doughnut scoring a candidate against a job is
skill_match_gauge_field. It reads the job from the action context, prints the score inside the arc, and goes green when a candidate beats 100 percent.Read the guide 1 uses in core - skills_one2manyOdoo skills_one2many Widget: The Employee Skills Matrixone2manymany2manyThe skills block on an Odoo employee form is not a normal one2many list.
skills_one2manyships its own renderer with hardcoded grouping, permission checks, and a report shortcut.Read the guide 3 uses in core - task_with_hoursOdoo task_with_hours Widget: Task Picker with Remaining Hoursmany2oneOn timesheet lines, the task dropdown shows each task's remaining allocated hours while you search, then hides them once you pick. That is the
task_with_hourswidget fromhr_timesheet.Read the guide 3 uses in core - timesheet_duration_uomOdoo timesheet_duration_uom Widget: Hours, Days or TimefloatThe same number is 7.5 hours or 0.94 days depending on how your company records time. This widget picks the right renderer, and swaps in an hours-only variant when the setting says time.Read the guide 1 uses in core
- timesheet_uomOdoo timesheet_uom Widget: Hours or Days, Decided by Companyfloat
timesheet_uomis a dispatcher: it renders every timesheet duration with whichever widget matches your company's timesheet encoding unit, hh:mm for hours, a toggle for days.Read the guide 114 uses in core - timesheet_uom_no_toggleOdoo timesheet_uom_no_toggle Widget: Timesheet FieldfloatThe quieter sibling of
timesheet_uom: same per-company unit handling, minus the clickable toggle. timesheet_uom_no_toggle exists for the screens where that button would edit data it should not.Read the guide 12 uses in core - versions_timelineOdoo versions_timeline Widget: Document Version Historyone2manyA document's earlier versions, shown as a timeline rather than a table, with each entry restorable or downloadable.Read the guide 1 uses in core
- work_permit_uploadOdoo work_permit_upload Widget: Work Permit File UploadbinaryThe binary field with a different template, used for an employee's work permit. Nothing else changes, and on the next branch it does not exist at all.Read the guide 1 uses in core
Discuss / Productivity
20 widgets- activity_model_selectorOdoo activity_model_selector Widget: Link to Any RecordcharChoose a model, then choose a record: the two-step picker on the Schedule Activity wizard. Its cleverest part is protecting the summary you already typed from being wiped by the model change.Read the guide 1 uses in core
- boolean_update_flagOdoo boolean_update_flag Widget: Track Manual EditsbooleanA checkbox that also answers a second question: did a human change this, or did the server?
boolean_update_flagexists because an onchange cannot tell the difference.Read the guide 1 uses in core - calendar_event_notes_htmlOdoo calendar_event_notes_html Widget: Notes Without Drag HandleshtmlThe rich text editor for meeting notes, with exactly one plugin taken out. In a narrow calendar panel, drag handles on every block were doing more harm than good.Read the guide 1 uses in core
- datetime-pickerOdoo datetime-picker: The Website Date Input, Not a Field WidgetDespite the name,
datetime-pickeris not something you put in awidget=attribute on a form view. It is a website side interaction that upgrades any frontend<input>carryingdata-widget="datetime-picker"into Odoo's calendar picker.Read the guide 4 uses in core - html_composer_messageOdoo html_composer_message Widget: The Email Composer BodyhtmlThe rich text area of Odoo's full email composer is its own field widget.
html_composer_messagetunes the HTML editor for writing messages: mentions, collapsed quotes, batch-only placeholders, and attachment syncing.Read the guide 3 uses in core - html_mailOdoo html_mail Widget: Email HTML Editor Field GuidehtmlThe editor behind Odoo's email bodies. html_mail is the html field retuned for mail clients: styles inlined on save, layouts email clients cannot render stripped out.Read the guide 12 uses in core
- integer_update_flagOdoo integer_update_flag Widget: Flag Manual Number EditsintegerThe numeric twin of
boolean_update_flag: an integer input that also records whether a human, rather than a recalculation, moved the number. It has one sharp edge above 999.Read the guide 1 uses in core - mail_composer_attachment_listOdoo mail_composer_attachment_list Widget: Composer Attachmentsmany2manyThe attachment rows under Odoo's email composer are the
mail_composer_attachment_listwidget: a stripped-down many2many_binary that lists, opens and deletes, but never uploads.Read the guide 3 uses in core - many2many_tags_emailOdoo many2many_tags_email: Recipient Tags That Know Emailsmany2manyone2manyThe email tags field is the recipient picker behind Odoo's share and invite dialogs: partner pills that show emails, accept Name <email> input, and can fix a bad address inline.Read the guide 9 uses in core
- many2manyattendeeOdoo many2manyattendee Widget: Meeting Attendee Statusmany2manyAttendee avatars with a tick, a cross or a question mark on each, plus flags for missing emails and people who are already busy. All of it from one server call the widget makes itself.Read the guide 1 uses in core
- many2manyattendeeexpandableOdoo many2manyattendeeexpandable Widget: Collapsed Attendeesmany2manyThe attendee widget again, with a collapse. In a calendar popover there is no room for thirty avatars, so it shows the counts and lets you open the list when you want it.Read the guide 1 uses in core
- many2one_avatar_userOdoo many2one_avatar_user: Assignee Fields with Avatarsmany2oneThe assignee field with a face:
many2one_avatar_userrenders a user link as an avatar with online presence and chat access, and wires up the Assign to me command.Read the guide 157 uses in core - portal_wizard_user_one2manyOdoo portal_wizard_user_one2many Widget Explainedone2manyThe Grant Access dialog is one of the few places in Odoo where a double click can send two invitation emails.
portal_wizard_user_one2manyis the twenty-line widget that stops it.Read the guide 1 uses in core - question_page_one2manyOdoo question_page_one2many Widget: Sectioned Question Listsone2manymany2manyThe survey question list looks like an ordinary embedded list until you add a section.
question_page_one2manyis the widget that makes sections behave, and it saves the whole survey behind your back on every edit.Read the guide 1 uses in core - radio_selection_with_filterOdoo radio_selection_with_filter Widget: Filtered RadiosselectionRadio buttons that show only the choices this record is actually allowed to make. Small idea, and in Odoo 19 it changed contract in a way that silently breaks Odoo 18 views.Read the guide 1 uses in core
- selection_badge_iconsOdoo selection_badge_icons Widget: Icon Badges for Many2onemany2oneThe activity scheduling dialog in Odoo 19 picks the activity type from icon-labeled badges. That row of buttons is
selection_badge_icons, a many2one-only twist on selection_badge.Read the guide 3 uses in core - shortcutOdoo shortcut Widget: The Canned Response Prefix FieldcharOdoo 19's
shortcutwidget dresses a plain char field with a fixed::prefix, so the canned response form reads exactly like what users will type in the Discuss composer.Read the guide 3 uses in core - sms_widgetOdoo sms_widget: The SMS Composer With Segment CountingtextcharhtmlThe message box in Odoo's Send SMS dialog does live math while you type:
sms_widgetdetects the character encoding, counts the characters, and tells you how many SMS segments, and therefore credits, the message will cost.Read the guide 6 uses in core - survey_description_pageOdoo survey_description_page Widget: Title Cell With ShortcutschartextA text cell with two affordances bolted on: a button that opens the row, and a pencil marking section rows. Both depend on the widget around it, which is why it does nothing on its own.Read the guide 1 uses in core
- text_scheduled_dateOdoo text_scheduled_date Widget: The Send Later ButtonchartextNew in Odoo 19, the text_scheduled_date widget renders the composer's Send Later button: a clock that opens a dialog with preset slots and a custom picker, then stores the choice in the wizard's
scheduled_datefield.Read the guide 2 uses in core
Sales / CRM
14 widgets- badge_rottingOdoo badge_rotting Widget: Stale Stage Badges in List Viewsmany2oneThe
badge_rottingwidget renders a stage column that carries a red 12d pill when the record has been sitting in that stage too long. It is the list-view member of Odoo 19's rotting family.Read the guide 3 uses in core - loyalty_data_fieldOdoo loyalty_data_field Widget: Loyalty Card SummaryjsonThe loyalty summary on a sale order: points, rewards, whatever the server computed. It is a display with no options at all, and it does not survive into the next version.Read the guide 1 uses in core
- loyalty_one2manyOdoo loyalty_one2many Widget: Rules and Rewards Listsone2manymany2manyThe Rules and Rewards blocks on an Odoo loyalty program form look custom, but
loyalty_one2manyis just the standard x2many widget wearing a different template: a heading with the field label and an always present Add button.Read the guide 3 uses in core - many2one_avatar_leader_userOdoo many2one_avatar_leader_user Widget: Team Leader Pickermany2oneA user picker that knows who runs the team:
many2one_avatar_leader_userrenders the standard avatar dropdown and marks the selected sales team's leader with a (Team Leader) tag.Read the guide 3 uses in core - quotation_document_many2manyOdoo quotation_document_many2many Widget: Quote PDF Filesmany2manyone2manyThe upload area for the PDF pages Odoo wraps around a quotation. It borrows the product document kanban wholesale and changes three things: where uploads go, what they attach to, and that only PDFs are accepted.Read the guide 1 uses in core
- res_partner_many2oneOdoo res_partner_many2one Widget: Partner Autocomplete Explainedmany2oneType three letters into a customer field and Odoo suggests real companies with their logo, address and VAT. That is
res_partner_many2one: a standard many2one wrapped with Odoo's company autocomplete service. It lives in a module most people have never looked at.Read the guide 20 uses in core - rottingOdoo rotting Widget: Stale Record Badges on Kanban CardsintegerOdoo 19 marks records that sit too long in a pipeline stage as rotting. The
rottingwidget is the red day-count badge that appears on their kanban cards.Read the guide 3 uses in core - rotting_statusbar_durationOdoo rotting_statusbar_duration Widget: Stage Bar with Rot Alertsmany2oneThe
rotting_statusbar_durationwidget is the Odoo 19 form statusbar that shows how long a record spent in each stage and warns, on hover, when the record has gone stale.Read the guide 3 uses in core - so_line_create_buttonOdoo so_line_create_button Widget: Sales Order From a Taskmany2oneOn a billable project task, the Sales Order Item field carries a small plus button. That is
so_line_create_button: a many2one that can spawn a whole sales order in a dialog and wire the task to its first service line automatically.Read the guide 3 uses in core - so_line_fieldOdoo so_line_field Widget: Timesheet Sales Order Itemsmany2oneThe Sales Order Item column on Odoo timesheets is rendered by
so_line_field, a many2one variant that quietly records whether a human picked the item. Here is what it actually does.Read the guide 8 uses in core - so_template_line_o2mOdoo so_template_line_o2m Widget: Optional Sectionsone2manyQuotation templates gained optional sections in Odoo 19, and this widget is what keeps them honest: move a line into one and its quantity becomes zero, move it out and the quantity comes back.Read the guide 1 uses in core
- sol_o2mOdoo sol_o2m Widget: The Sales Order Line Listone2manyThe order lines table on every Odoo quotation. Most of what it adds to the generic sectioned list is one feature: making combo products behave like a single line that happens to have parts.Read the guide 1 uses in core
- sol_product_many2oneOdoo sol_product_many2one: The Sale Order Line Product Fieldmany2oneEvery product you pick on an Odoo quotation goes through sol_product_many2one: the widget that decides whether you get a plain product, a variant configurator, a combo picker, or a grid.Read the guide 2 uses in core
- sol_textOdoo sol_text Widget: The Order Line Description CelltextcharThe description cell on a quotation line. It behaves like the shared section and note text field everywhere except on a combo line, where it deliberately drops to a single line input.Read the guide 1 uses in core
Relational
7 widgets- badges_many2oneOdoo badges_many2one: New in Odoo 20many2oneNew capability in Odoo 20, not a rename. It turns a many2one into a row of clickable badges, can put a different icon on each one, and keeps working when the connection drops.Read the guide 32 uses in core
- many2many_avatar_resourceOdoo many2many_avatar_resource: Tags That Reversemany2manyThe x2many companion to the resource avatar widget. It marks machines with a wrench, shows a hover card only for people, and in kanban it renders the tags in reverse order.Read the guide 3 uses in core
- many2many_tags_color_dotOdoo many2many_tags_color_dot: New in Odoo 20many2manyNew in Odoo 20. It renders tags as a colored dot next to a plain label rather than a filled pill, and it overrides the parent widget's click behavior through an option nobody declares.Read the guide 11 uses in core
- many2one_avatar_resourceOdoo many2one_avatar_resource: Humans and Machinesmany2oneThis widget renders a link to a
resource.resourcewith an avatar, distinguishing a person from a machine. It also reads an option Odoo never declares, and its click behavior changes depending on the view you put it in.Read the guide 5 uses in core - many2one_referenceOdoo many2one_reference Widget: Setup and the Crashmany2one_referenceThe
many2one_referencewidget renders a reference field, where the target model lives in a second field, as an ordinary many2one picker. Leave that second field out of the view and it does not degrade: it throws.Read the guide 1 uses in core - many2one_reference_integerOdoo many2one_reference_integer: Show the Raw IDmany2one_referenceWhere
many2one_referenceresolves a reference into a record picker,many2one_reference_integerdoes the opposite: it shows you the bare database id and nothing else.Read the guide 2 uses in core - section_and_note_one2manyOdoo section_and_note_one2many: Four Hidden Optionsone2manyThis is the widget behind order and invoice lines, the one that lets a line be a section or a note instead of a product. It reads four settings that appear in no option list.Read the guide
Inventory / Purchase
24 widgets- counted_quantity_widgetOdoo counted_quantity_widget: Counted, Not Just TypedfloatThe counted quantity cell in a physical inventory. The hard part is not the number, it is knowing the difference between counted zero and not counted at all.Read the guide 1 uses in core
- dateOdoo Date Widget: Picker Options, Limits & Range PairingdateEvery date field in Odoo renders through the Date widget. Here is its full option set as shipped in the source: accepted date limits, future warnings, picker precision, display format, and the range pairing the documentation never mentions.Read the guide 3 uses in core
- forecast_widgetOdoo forecast_widget: The Availability Badge on Stock MovesfloatThe green Available, orange Exp date and red Not Available pills on Odoo transfer lines are one widget reading five fields you cannot see. Here is exactly how
forecast_widgetdecides which badge you get.Read the guide 3 uses in core - lead_days_widgetOdoo lead_days_widget: The Replenishment Lead Times PanelcharThe lead time breakdown on a reordering rule: supplier delay, purchase security, warehouse handling, all added up. It is a server-computed JSON payload rendered by a five line widget.Read the guide 1 uses in core
- many2many_alt_posOdoo many2many_alt_pos Widget: Alternative Purchase Ordersmany2manyThe list of competing quotations on a purchase order. It marks the one you are looking at, refuses to reopen it, and opens the others in the same window so the breadcrumb keeps growing.Read the guide 1 uses in core
- many2one_uomOdoo many2one_uom Widget: Product-Aware Unit Selectionmany2oneThe unit dropdown on order and move lines is
many2one_uom: a many2one that knows which product the line carries and offers the units that make sense for it.Read the guide 69 uses in core - mondialrelay_relayOdoo mondialrelay_relay Widget: A Carrier Map Inside OdoocharA carrier's own map, loaded from their servers into an Odoo form. It is one of the very few widgets in core that pulls a third-party script, and it comes with a hand-written workaround for that carrier's bug.Read the guide 1 uses in core
- monetary_no_zeroOdoo monetary_no_zero Widget: Blank Cells Instead of 0.00monetary
monetary_no_zerois the standard monetary widget with one refinement: amounts that round to zero in the currency's precision render as an empty cell instead of 0.00. Purchase built it to keep its bill matching list readable.Read the guide 2 uses in core - move_product_label_fieldOdoo move_product_label_field Widget: Product and Its Labelmany2oneThe product cell on a transfer line, with the delivery description tucked underneath it. Its most useful behavior is knowing when that description is worth showing at all.Read the guide 1 uses in core
- open_match_line_widgetOdoo open_match_line_widget: Open a Bill Match LineanyA cell whose only job is to open the matching line it sits on. Model and method are both written into the widget, which makes it precise and completely non-portable.Read the guide 1 uses in core
- package_m2mOdoo package_m2m Widget: Packages With a No Package Tagmany2manyPackage names as tags on a transfer line, plus a synthetic No Package tag for the lines that are not in one. It is deliberately display only, and the code makes sure of that.Read the guide 1 uses in core
- package_m2oOdoo package_m2o Widget: Stock Package Field Explainedmany2oneThe many2one that Inventory uses for packages. package_m2o looks like a plain relation field until you notice the names it displays change with the transfer's state and context.Read the guide 12 uses in core
- pick_fromOdoo pick_from Widget: Choosing the Source Quantmany2oneThe Pick From column on Odoo's detailed operations tells a warehouse worker exactly which location, lot and package to take stock from. The
pick_fromwidget is a many2one overstock.quantthat fakes its display name when the quant is not set.Read the guide 3 uses in core - picking_type_dashboard_graphOdoo picking_type_dashboard_graph Widget: Inventory Mini ChartstextThe six little bars on every Odoo Inventory Overview card, late, yesterday, today, the next days, are the
picking_type_dashboard_graphwidget. Each bar is clickable and filters the transfer list to its exact date bucket.Read the guide 3 uses in core - pol_product_many2oneOdoo pol_product_many2one Widget: Product Picker With a Variant Matrixmany2oneThe product field on a purchase order line. Pick a product with one variant and it fills in; pick one with several and a grid opens.Read the guide 1 uses in core
- popover_widgetOdoo popover_widget: A Popover Driven by JSONcharAn icon in a cell that opens a popover when clicked, with the message, the icon, the color and the position all decided server side and shipped as JSON in a text field.Read the guide 1 uses in core
- replenishment_graph_widgetOdoo replenishment_graph_widget: The Stock Level CurvecharThe saw-tooth stock curve on a reordering rule, drawn against its minimum and maximum lines. New in Odoo 19, and it replaced a widget that showed history instead of a forecast.Read the guide 1 uses in core
- sml_x2_manyOdoo sml_x2_many Widget: Detailed Operations From Stockone2manymany2manyThe detailed operations list on a stock move. Its Add a line does not create an empty row: it opens the quants that actually hold the product, filtered to what is left after the lines you have already typed.Read the guide 1 uses in core
- stock.forced_placeholderOdoo stock.forced_placeholder: Placeholders That Never Hidemany2oneOn Odoo's replenishment screen, an empty Route cell still tells you which route would apply. That is
stock.forced_placeholder: a many2one whose placeholder text survives where the standard widget would show nothing.Read the guide 5 uses in core - stock_action_fieldOdoo stock_action_field Widget: A Number That Opens an ActionfloatmonetaryA quantity or an amount that is also a link. Click the On Hand figure on a product list and it opens the stock view for that product, with context.Read the guide 1 uses in core
- stock_move_one2manyOdoo stock_move_one2many Widget: Picking Operations Listone2manymany2manyThe operations list on a transfer. Its distinguishing feature is a button that adds every line in a package at once, and it saves the whole picking before it can even offer that.Read the guide 1 uses in core
- stock_picking_many2manyOdoo stock_picking_many2many Widget: Add Transfers to a Wavemany2manyThe transfers list on a wave. Adding one does not link a record directly: it opens a selection, creates a wizard, and lets the server attach them properly.Read the guide 1 uses in core
- stock_rescheduling_popoverOdoo stock_rescheduling_popover Widget: Late Operation AlertscharThe red triangle next to a transfer's scheduled date is a widget:
stock_rescheduling_popoverreads a JSON field and lists the late upstream documents that put the date at risk.Read the guide 7 uses in core - time_period_selectionOdoo time_period_selection Widget: Months Named at RuntimeselectionA selection whose labels are written when the page loads. Instead of "last year, month plus one" it says "February 2025", which is the difference between a setting people use and one they avoid.Read the guide 1 uses in core
Project / Timesheet
15 widgets- depend_on_ids_one2manyOdoo depend_on_ids_one2many Widget: Blocking Tasks, Sharedone2manymany2manyThe blocking tasks list on a shared project task. It exists because the portal view is not the backend view, and the standard list renderer assumes things the portal cannot offer.Read the guide 1 uses in core
- many2many_avatar_userOdoo many2many_avatar_user Widget: Assignee Avatarsmany2manyone2manyThe Assignees field on project tasks is this widget: user avatars as pills, an avatar card on click, and a kanban quick-assign popover that saves the record instantly.Read the guide 24 uses in core
- name_with_subtask_countOdoo name_with_subtask_count Widget: Sub-task CounterscharThe (2/5 sub-tasks) suffix on task names in Odoo project lists comes from
name_with_subtask_count, a char widget with auto-loaded counters and a surprising history.Read the guide 7 uses in core - notebook_task_one2manyOdoo notebook_task_one2many Widget: Tasks in a Notebook Tabone2manyA task list rendered inside a notebook tab, with its own renderer and one adjustment: a kanban card opens the task rather than a dialog.Read the guide 1 uses in core
- priority_switchOdoo priority_switch Widget: Stars with Per-Level CommandsselectionProject tasks use
priority_switch, not the plainprioritywidget. The stars look identical; the difference lives entirely in the command palette.Read the guide 4 uses in core - projectOdoo project Widget: The Task's Project Pickermany2oneOn an Odoo task form the project field is not a plain dropdown: the
projectwidget wraps the standard many2one and shows a gray Private placeholder when the task belongs to nobody's project. Small widget, one hardcoded assumption worth knowing.Read the guide 5 uses in core - project_is_favoriteOdoo project_is_favorite Widget: The Star That Ignores ReadonlybooleanThe star on every Odoo project card is not the plain favorite widget.
project_is_favoriteexists for one reason: letting users star projects they are not allowed to edit.Read the guide 4 uses in core - project_state_selectionOdoo project_state_selection Widget: Project Status BubblesselectionThe green, orange and red status bubble on an Odoo project is
project_state_selection. It swaps the generic state colors for the five-color project palette, and quietly removes one status from the dropdown.Read the guide 2 uses in core - project_task_state_selectionOdoo project_task_state_selection: The Task State BubbleselectionThe task state selector is the colored status bubble on every Odoo task: In Progress, Changes Requested, Approved, Done or Canceled, with click behavior that adapts to where you are.Read the guide 11 uses in core
- status_with_colorOdoo status_with_color Widget: Project Health BubblesselectionThe green On Track and red Off Track bubbles on Odoo project cards come from
status_with_color, a project module widget that maps five health values to five fixed bubble colors. Its two knobs are attributes, not options, and Odoo 20 replaces both.Read the guide 5 uses in core - statusbar_durationOdoo statusbar_duration Widget: Time Spent in Each Stagemany2one
statusbar_durationis the status bar that prints how long the record sat in every stage, fed by the chatter's tracking history. It only works on models that opt into a server-side mixin, and Odoo 20 rewrites its data contract.Read the guide 2 uses in core - subtasks_one2manyOdoo subtasks_one2many Widget: The Sub-tasks Listone2manyThe sub-tasks list on a project task. Its distinguishing behavior is what it does not pass on: when a sub-task opens, only a filtered set of context keys travels with it.Read the guide 1 uses in core
- task_done_checkmarkOdoo task_done_checkmark Widget: A Tick That Saves in ListsbooleanA tick instead of a switch, with one rule worth knowing: in a list or a kanban it saves as soon as you click, and on a form it waits for you.Read the guide 1 uses in core
- task_stage_with_state_selectionOdoo task_stage_with_state_selection Widget: Stage plus State in One Cellmany2oneIn the task list view, the Stage column shows the stage name with the task's state bubble beside it. That pairing is
task_stage_with_state_selection, a composite widget that renders two fields in one cell, and it is not the many2one widget it looks like.Read the guide 2 uses in core - todo_done_checkmarkOdoo todo_done_checkmark Widget: The To-do Done CircleselectionOdoo's personal to-dos mark completion with a single circled check.
todo_done_checkmarkis astate_selectionin disguise, with two pieces of memory the source docs never mention.Read the guide 4 uses in core
Other / Misc
4 widgets- kanban_activityOdoo kanban_activity Widget: Activity Clock Guideone2manyThe little clock on every kanban card is
kanban_activity: a 32-line widget that quietly fetches six extra fields and color-codes your follow-ups.Read the guide 23 uses in core - lunch_is_favoriteOdoo lunch_is_favorite Widget: A Star That Ignores ReadonlybooleanNine lines of code that exist for one reason: Odoo's lunch menu kanban is declared non-editable, and the favorite star still has to work.Read the guide 1 uses in core
- many2many_uom_tagsOdoo many2many_uom_tags Widget: UoM Tags with Ratiosmany2manyNew in Odoo 19, many2many_uom_tags is the tags widget with unit awareness: its dropdown shows each unit of measure alongside what it converts to for the product at hand.Read the guide 2 uses in core
- pavs_one2manyOdoo pavs_one2many Widget: Attribute Values You Cannot Breakone2manyThe values list on a product attribute. Deleting one asks the server whether anything is using it, and refuses outright if the answer is yes, before any confirmation is offered.Read the guide 1 uses in core
Point of Sale
2 widgets- many2many_tags_placeholder_list_viewOdoo many2many_tags_placeholder_list_view Widget: Tags With a Placeholdermany2manyThe tags widget with one thing changed: a template that shows a placeholder when the cell is empty, so a list column does not go blank.Read the guide 1 uses in core
- upgrade_selectionOdoo upgrade_selection Widget: A Setting That Asks You to UpgradeselectionA settings dropdown that only works on Enterprise. On Community it opens the upgrade dialog and, when that closes, puts the value back to a hardcoded default.Read the guide 1 uses in core
Manufacturing / Maintenance
5 widgets- mrp_remaining_days_unformattedOdoo mrp_remaining_days_unformatted Widget: Deadline Without the ChromedatedatetimeThe remaining days widget with its badge taken off. Same relative dates, plain text, because a manufacturing list already has enough color in it.Read the guide 1 uses in core
- mrp_should_consumeOdoo mrp_should_consume Widget: Consumed Against ExpectedfloatThe component quantity with a second number beside it: what the bill of materials says you should have consumed for the quantity you are actually producing.Read the guide 1 uses in core
- mrp_timerOdoo mrp_timer Widget: A Live Work Order TimerfloatA duration that counts up while the operator is clocked on. It asks the server for the real elapsed time rather than trusting the stored value, then keeps ticking locally.Read the guide 1 uses in core
- mrp_workorder_popoverOdoo mrp_workorder_popover Widget: Why This Work Order Is BlockedcharAn icon on a work order that explains what is holding it up, with a button that replans it on the spot. Built on the inventory popover, and split in two on the next branch.Read the guide 1 uses in core
- workcenter_dashboard_graphOdoo workcenter_dashboard_graph Widget: Load Against CapacitytextThe load chart on a work center card. Three series over the same days: the capacity line, the load bars and, separately, the hours that exceed it.Read the guide 1 uses in core
Selection & Status
4 widgets- badges_selectionOdoo badges_selection: One Option Declared, Five ReadselectionNew in Odoo 20 and the replacement for
selection_badge. It declares a single option and quietly reads four more, two of which do conditional choice filtering with no Python at all.Read the guide 26 uses in core - hr_presence_status_privateOdoo hr_presence_status_private: Form Only, Until 20selectionAn employee presence indicator that Odoo 19 registers for form views only. Odoo 20 both lifts that restriction and quietly changes how it looks.Read the guide
- selection_badge_with_filterOdoo selection_badge_with_filter: Renamed Meaning in 20selectionIn Odoo 19 this widget shows a selection as badges filtered by another field's value. In Odoo 20 the same registration name belongs to a completely different widget, so the same XML does something else.Read the guide 1 uses in core
- work_entry_source_fieldwork_entry_source_field: Removed in Odoo 20selectionA radio field that knows one rule: a fully flexible calendar cannot use Working Hours as a work entry source. It warns the user rather than letting the server reject the save.Read the guide
Text & Numeric
6 widgets- field_float_scannableOdoo field_float_scannable: Removed in Odoo 20floatA float field that reacts to a barcode scan by firing a synthetic input event on itself. It is four lines long, and Odoo 20 removes it.Read the guide
- google_address_autocompleteOdoo google_address_autocomplete: Map Address FieldscharThis widget turns a street field into a Google Places search that fills the whole address block. Its seven field-mapping options are what make it usable on a model that does not name its fields the way
res.partnerdoes.Read the guide - partner_autocompleteOdoo partner_autocomplete: Enrich From a NamecharType a company name and this widget fills the rest of the partner record from Odoo's enrichment service. It also saves the record and posts a message, which is more than most widgets do.Read the guide
- passwordOdoo password Widget: Masking, Reveal & LimitschartextThe
passwordwidget renders a char or text field as a masked input with a reveal button. It is a display convenience, not a security control: the real value is already in the browser.Read the guide - password_meterOdoo password_meter Widget: Strength, Not MaskingcharThe
password_meterwidget scores a password against the policy your server actually enforces. It is the opposite of thepasswordwidget: it shows the value and rates it, rather than hiding it.Read the guide - sales_team_progressbarOdoo sales_team_progressbar: Removed in Odoo 20 and 19integerfloatA kanban progress bar that turns into a call to action when there is nothing to measure. Odoo 20 and 19 removes it, and the kanban progress bar variant it was built on goes with it.Read the guide
Date & Time
1 widgetBoolean & Toggles
2 widgets- boolean_checkboxOdoo boolean_checkbox: Why Odoo 20 Needed ItbooleanNew in Odoo 20, and it exists because the plain
booleanwidget stopped being predictable: in Odoo 20 it renders as a toggle on small screens and a checkbox on desktop.Read the guide 5 uses in core - boolean_toggle_labeledboolean_toggle_labeled: Removed in Odoo 20 And Odoo19booleanA boolean toggle that renders its own label, and the only option it has is one Odoo 20 and 19 deleted from the entire field library. The widget went too.Read the guide
Media & Files
1 widgetView-level
36 widgets- account_file_uploaderOdoo account_file_uploader: The Upload Bills WidgetThe Upload action on the Accounting dashboard is a view widget:
account_file_uploader. It files whatever you drop as attachments, then asks the journal to turn them into draft invoices or bills.Read the guide 3 uses in core - account_onboardingOdoo account_onboarding Widget: Journal Onboarding StepsThe accounting onboarding checklist, drawn from a JSON payload already attached to the journal rather than from a separate query.Read the guide 1 uses in core
- account_pick_currency_dateOdoo account_pick_currency_date Widget: Rate From a Chosen DateA date picker beside an invoice's exchange rate. Pick a date, and the rate for that date is fetched from the server and saved.Read the guide 1 uses in core
- attach_documentOdoo attach_document Widget: The Upload Button ExplainedThe Attach Receipt button on Odoo expenses is a reusable view widget:
attach_document. It saves the record before it ever opens the file picker, and it can hand the uploaded files to any model method you name.Read the guide 2 uses in core - bill_upload_guideOdoo bill_upload_guide Widget: Getting Bills Into OdooThe panel that offers three ways to get a bill into Odoo: upload a file, email it to an alias, or type one in.Read the guide 1 uses in core
- button_new_contractOdoo button_new_contract Widget: Start a New Employee ContractA button that asks for a start date, checks twice that the date is legitimate, then creates the contract and loads it.Read the guide 1 uses in core
- calendar_week_daysOdoo calendar_week_days Widget: Weekday Picker for Recurring EventsThe seven weekday toggles on a recurring event. The same widget the base framework provides, with a calendar template and a direct write on change.Read the guide 1 uses in core
- colors_reset_buttonOdoo colors_reset_button Widget: Reset Livechat ColorsThe little refresh icon next to Odoo Livechat's color pickers is
colors_reset_button: a one-click view widget that puts a set of fields back to the defaults you declare in the XML, and crashes if you forget to declare them.Read the guide 2 uses in core - customContentKanbanLikeWidgetOdoo customContentKanbanLikeWidget: Quotation PDF Document PickerThe card grid for building a quotation PDF: pick headers, per-line documents and footers, and fill the form fields inside them.Read the guide 1 uses in core
- documentation_linkOdoo documentation_link Widget: Settings Doc LinksEvery Documentation arrow link in Odoo's Settings pages is one view widget:
documentation_link. Its best trick is picking the right docs version for your server automatically.Read the guide 26 uses in core - generate_serialsOdoo generate_serials Widget: Generate Lot or Serial NumbersThe button that generates a run of lot or serial numbers for a move, and writes the resulting lines in one go.Read the guide 1 uses in core
- hr_department_chartOdoo hr_department_chart Widget: Department Hierarchy on a FormThe department's place in the org: parents above, children below, each clickable to open the employees inside it.Read the guide 1 uses in core
- hr_employee_chatOdoo hr_employee_chat Widget: The Chat Icon on EmployeesThe speech-bubble icon beside an employee's name is
hr_employee_chat: a one-icon view widget that drops you into a Discuss chat with that person, and that silently disappears when the employee has no user account.Read the guide 2 uses in core - hr_leave_statsOdoo hr_leave_stats Widget: Time Off Context on a RequestTwo lists on a time off request: what this employee has already taken this year, and who else in their department is away over the same dates.Read the guide 1 uses in core
- iap_buy_more_creditsOdoo iap_buy_more_credits Widget: IAP Credit ButtonsThe Buy Credits links under Odoo's SMS, lead enrichment and snailmail settings are one reusable view widget:
iap_buy_more_credits, driven entirely by two attributes.Read the guide 7 uses in core - import_lotsOdoo import_lots Widget: Paste Supplier Lot NumbersThe button for the other source of numbers: paste the supplier's list rather than generating your own.Read the guide 1 uses in core
- internal_resume_linesOdoo internal_resume_lines Widget: The Auto Resume TimelineNew in Odoo 19:
internal_resume_lineswrites the employee's internal career history for you, computed from version records, no manual resume entry required. It is the block titled with your company name above the editable resume.Read the guide 2 uses in core - lna_checklistOdoo lna_checklist Widget: Local Network Access ChecklistA checklist of local network access prerequisites whose ticks live in browser storage, not in the database, and are written when you save.Read the guide 1 uses in core
- mail_activity_list_reschedule_dropdownOdoo mail_activity_list_reschedule_dropdown: Three-Click ReschedulingA compact dropdown on an activity row offering today, tomorrow and next week, with the server deciding what those actually mean.Read the guide 1 uses in core
- mail_activity_mixin_list_reschedule_dropdownOdoo activity mixin reschedule dropdown: Reschedule From a RecordThe same three-option dropdown, on a list of leads or tasks rather than activities. It moves your next activity on that record.Read the guide 1 uses in core
- mo_view_list_dropdownOdoo mo_view_list_dropdown Widget: Bulk Work Order StatesA per-row dropdown that acts on the whole selection when there is one, and quietly skips work orders it should not move.Read the guide 1 uses in core
- notification_alertOdoo notification_alert Widget: The Blocked Push BannerThe banner warning that push notifications are blocked is the
notification_alertview widget: twelve lines of code, one browser API check, and exactly one state in which it renders anything at all.Read the guide 2 uses in core - pls_tooltip_buttonOdoo pls_tooltip_button Widget: Why This Lead Scored ThatThe button that explains a lead's win probability: a progress wheel, the three factors helping it and the three hurting it.Read the guide 1 uses in core
- point_of_sale_test_eposOdoo point_of_sale_test_epos: Test Your ePOS PrinterNew in Odoo 19, the Test button next to your Epson ePOS settings is a view widget.
point_of_sale_test_eposfires a real receipt at the printer and translates Epson's cryptic error codes into readable advice.Read the guide 3 uses in core - pos_cashdro_admin_buttonsOdoo pos_cashdro_admin_buttons Widget: Cash Machine Admin ToolsTwo buttons on the CashDro settings: download the bus worker logs, and open the machine's own diagnostics page.Read the guide 1 uses in core
- pos_glory_cash_admin_buttonsOdoo pos_glory_cash_admin_buttons Widget: Glory Cash Machine ToolsA live connection status for a Glory cash machine, plus three actions: reset it, download the logs, or open its admin page.Read the guide 1 uses in core
- pos_payment_provider_cardsOdoo pos_payment_provider_cards Widget: Pick a Payment TerminalA card per payment terminal provider, showing whether its module is installed, with install and setup in the same place.Read the guide 1 uses in core
- purchase_file_uploaderOdoo purchase_file_uploader Widget: Bills From Purchase OrdersUpload a bill against one purchase order or a selection of them, with a check that they all belong to the same vendor.Read the guide 1 uses in core
- qty_at_date_widgetOdoo qty_at_date_widget: The Availability Chart IconThe little chart icon on Odoo sale order lines is
qty_at_date_widget: a stock-aware view widget that turns red when the line will not be fulfilled on time and opens the availability popover with a jump into the forecast report.Read the guide 2 uses in core - signatureOdoo signature Widget: The Sign Button on DeliveriesThe Sign button on Odoo delivery orders is the
signatureview widget: a button that opens the drawing dialog and writes the image straight into a binary field. Not to be confused with the field widget that shares its name.Read the guide 2 uses in core - subtask_counterOdoo subtask_counter Widget: Closed and Total Sub-TasksTwo numbers on a task row, closed over total, that double as the control for expanding its sub-tasks.Read the guide 1 uses in core
- subtask_kanban_listOdoo subtask_kanban_list Widget: Open Sub-Tasks on a Kanban CardThe open sub-tasks on a task's kanban card, each with an editable state, plus an inline field for adding another.Read the guide 1 uses in core
- survey_question_triggerOdoo survey_question_trigger Widget: Conditional Question WarningsThe icon beside a survey question that says whether its conditional display will actually work, computed live from the list rather than from saved data.Read the guide 1 uses in core
- todo_chatter_panelOdoo todo_chatter_panel Widget: The Chatter Beside a To-DoThe chatter for a to-do, hidden by default on large screens and shown on small ones, toggled from elsewhere in the interface.Read the guide 1 uses in core
- web_ribbonOdoo web_ribbon Widget: Archived, Paid & Custom RibbonsThe corner banner on Odoo forms, Archived, Paid, Cancelled, is one reusable view widget:
web_ribbon. It takes three attributes, and one undocumented sizing rule.Read the guide 157 uses in core - week_daysOdoo week_days Widget: The Weekday Checkbox RowThe row of seven weekday checkboxes on Odoo's recurrence forms is the
week_daysview widget. It demands seven exact boolean fields on the model, and it reorders itself by the user's locale.Read the guide 2 uses in core
Special & Technical
7 widgets- additional_identifiers_buttonOdoo additional_identifiers_button: New in Odoo 20jsonThe dropdown half of Odoo 20's additional identifiers pair. It offers only the types this partner has not used yet, in an order the server decides.Read the guide 3 uses in core
- additional_identifiers_listOdoo additional_identifiers_list: New in Odoo 20jsonNew in Odoo 20. It renders a partner's additional identifiers, tax and registration numbers, from a JSON field whose shape is described by a second, server-computed field.Read the guide 3 uses in core
- barcode_handlerOdoo barcode_handler: Removed in Odoo 20anyAn invisible field that renders nothing and exists purely to catch barcode scans into a field. Odoo 20 removes it, and barcode handling moves out of the field layer entirely.Read the guide 2 uses in core
- code_ir_ui_viewOdoo code_ir_ui_view Widget: The View Arch Editortexthtml
code_ir_ui_viewis the code editor Odoo puts on thearchfield of the Views screen. It is theacewidget with a different editor component bolted on, and it is applied in a way a normal search will never find.Read the guide 1 uses in core - contact_statisticsOdoo contact_statistics Widget: What It RendersjsonThe
contact_statisticswidget renders ajsonfield as a read-only list of statistics. It exists for one screen, the contact form, and it takes no configuration at all.Read the guide 2 uses in core - profiling_qweb_viewOdoo profiling_qweb_view Widget: Reading QWeb ProfilestextThe
profiling_qweb_viewwidget renders a stored profiling result as annotated QWeb source, with the time and query count for every directive written into the gutter.Read the guide 1 uses in core - res_user_group_idsOdoo res_user_group_ids Widget: The Access Rights Gridmany2many
res_user_group_idsis the widget behind the access rights grid on the user form. It generates a whole form view at runtime from a hierarchy the server sends, which is why it works nowhere else.Read the guide 3 uses in core
Need this implemented in your Odoo?
We customize, migrate, and support Odoo for companies worldwide — from a single tricky view to a full implementation.
