selection
The 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.
| Studio name | Selection |
|---|---|
| Technical name | selection |
| Field types | many2one, selection |
| Views | form, list, kanban |
| Module | web, present in every Odoo database |
| Used in core | 15 explicit occurrences across 12 modules, including web, loyalty, crm_iap_mine, website_slides, l10n_in_ewaybill, l10n_es_edi_tbai, plus every Selection field that names no widget at all |
| Versions | Odoo 20.0, Odoo 19.0, Odoo 18.0 |
| No-code setup | Yes, via Odoo Studio (Enterprise) |
| Alternatives | radio, selection_badge, statusbar, priority |
What the Selection field does
What this means for your team
Setting it up in Odoo Studio (no code)
What Studio cannot do here
Supported options in Odoo 19
| Option | Type | What it does |
|---|---|---|
placeholder_field | field name | Declared in supportedOptions as a Dynamic Placeholder hook for char fields, which is why Studio offers it, but extractProps never reads it, so setting it has no effect on this widget. Use the placeholder attribute instead.(since Odoo 19.0) |
The one declared option is dead code in the widget. placeholder_field appears in supportedOptions, which is what makes Studio show a Dynamic Placeholder setting, but the widget's extractProps never reads it. Only the static placeholder attribute reaches the component. If you need a hint text on a selection dropdown, set placeholder="..." on the field node.
Working examples
Under the hood: one dropdown, two engines
Version compatibility
| Version | Status | Notes |
|---|---|---|
| Odoo 20.0 | In development | Not released. Kanban autosave removed and orphaned values render as disabled choices on the development branch. Details below. |
| Odoo 19.0 | Verified | Verified against the shipped source. SelectMenu rendering with the mobile bottom sheet. |
| Odoo 18.0 | Verified | Same XML. Rendered with the browser native select, no placeholder_field declaration, and false valued choices were also hidden. |
Upgrade note for 18 to 19. Your XML keeps working, but the rendering changed from the browser's native select element to Odoo's SelectMenu, which brings the mobile bottom sheet and consistent styling. Two subtle differences travel with it: Odoo 18 also hid choices whose value is false, while 19 only hides empty labels, and the placeholder_field declaration only exists from 19.0.
What is changing in Odoo 20
Common problems and fixes
| Symptom | Cause and fix |
|---|---|
| Form errors or the field renders blank after removing a selection value | A record still stores the removed value, and the 19.0 label lookup has no guard for values missing from the selection. Restore the value or migrate stored data to a live value. Odoo 20 will degrade gracefully instead. |
| placeholder_field is set but nothing shows | The option is declared but never consumed by this widget. Use the static placeholder attribute on the field node. |
| A choice is missing from the dropdown | Selection entries with an empty label are filtered out, or a domain excludes the row in many2one mode. Give the value a label, or test the field without its domain. |
| Many2one mode does not list all records | The single name_search call is capped at the ORM default of 100 results. Narrow the domain, or switch to the full many2one widget for large relations. |
| Changing the value on a kanban card saved the record immediately | Kanban view type hardcodes autosave to true in 19. Expected behavior. Move the edit to the form view if review before save matters. |
| Users can create new entries from the dropdown | They are not using this widget. The selection widget has no create path. Check the view. The field is likely rendering as a default many2one. |
Selection field vs the alternatives
| Widget | Best for | Key difference |
|---|---|---|
selection | Single choice from a short, stable list | Closed dropdown, no creation, one cached query in many2one mode |
| radio | Three to five options users should see at once | Renders every choice as radio buttons, no dropdown |
| selection_badge | Fast toggling between a few values | All values shown as clickable badges |
| statusbar | Values that represent a workflow progression | Arrow bar in the form header, click to advance |
| priority | Importance or rating scales | Stars instead of labels, saves on click |
Frequently asked questions
Do I need to set widget="selection" on a selection field?+
Can I use the selection widget on a many2one field?+
How do I add a selection dropdown without a developer?+
Why does my dropdown show no placeholder?+
Does changing a selection on a kanban card save immediately?+
How do I show different selection values on different forms?+
What happens to records holding a deleted selection value?+
Is the selection widget different on mobile?+
Selection lists that fight your process?
Values nobody can retire, dropdowns that should depend on another field, statuses that need to differ per team: selection problems look small and quietly poison reporting. We untangle value lists, wire filtered and dynamic selections, and migrate the stored data so nothing breaks on the way.
Book a free consultation