Skip to main content
iVentureTeam

mo_view_list_dropdown

A per-row dropdown that acts on the whole selection when there is one, and quietly skips work orders it should not move.

Siddharth JambukiyaSiddharth JambukiyaOdoo Techno-Functional Consultant
August 27, 2026Updated August 29, 20264 min read
Technical namemo_view_list_dropdown
Viewslist (view widget, <widget> element)
Modulemrp, the Manufacturing app
Used in coreWork order lists in mrp
VersionsOdoo 20.0, Odoo 19.0, Odoo 18.0, Odoo 17.0
No-code setupNo. It is set in view XML and depends on module-specific data
Alternativesmrp_should_consume, mrp_timer, mrp_workorder_popover, workcenter_dashboard_graph

What the work order dropdown does

A manufacturing order's work orders move through states together more often than individually: a whole line is blocked, or a whole batch is ready. Changing them one at a time is the wrong shape for that.

This widget puts a dropdown on each row that acts on the current selection. Select five, use any row's dropdown, and all five move.

What makes it safe is what it refuses. Work orders already in the target state, already done, or belonging to a finished manufacturing order are dropped from the set before anything is sent.

What this means for your team

Shop floor status is only useful if it is current, and it stays current only when updating it is quick. Bulk state changes are what make a supervisor's pass over a line take a minute rather than ten.

The filtering matters for data integrity: a done work order should not be reopened by a careless bulk action, and the widget enforces that in the browser before the server is asked.

Supported options in Odoo 19

The widget declares no options and takes the standard view widget props. The filtering rules, the color map and the width hint are described below. Read from the work order list dropdown source, Odoo 19.0.

OptionTypeWhat it does
the skip filterbuilt into the state setterDrops work orders already in the target state, already done, or whose manufacturing order is done.
the selection fallbackbehaviorWith nothing selected the clicked record is used instead, so the dropdown works either way.
the color mapstate to styling classFive mapped states; anything unmapped renders with no color rather than failing.
listViewWidthregistration hintKeeps the dropdown column very narrow in a list.(default: 20)

Two different fallbacks. The state setter falls back to the clicked record when nothing is selected; the generic call helper falls back first to the selection's evaluation context identifiers and then to the clicked record. They are not quite the same path.

Working examples

Placing it

<widget name="mo_view_list_dropdown"/>

Inside a work order list. No attributes.

What is filtered out

# already in the target state
# already done
# manufacturing order already done

If nothing survives, nothing is sent.

The color map

blocked  ready  progress  cancel  done

Unknown states get no color.

Three reasons a work order is skipped

The filter is three conditions in one expression, and each is there for a different reason. Skipping work orders already in the target state avoids a pointless write. Skipping done ones protects completed work. Skipping those whose manufacturing order is done protects the order as a whole, which is the case a per-record rule would miss.

Only if identifiers survive that filter is the server called, so a bulk action on an all-done selection is silently a no-op rather than an error.

Every call is followed by a reload of the list root and a notification to the model. Both are needed: the reload fetches the new states, and the notification makes the list redraw. Without the reload a state change would leave stale rows, which matters more here than usual because a work order can drop out of the current filter.

The color indicator reads from a small map of state to styling class, returning an empty string for anything unmapped. That is a deliberate fallback rather than an oversight: a new state added by a customization renders without color rather than breaking the row.

Version compatibility

VersionStatusNotes
Odoo 20.0In developmentNot released. Substantially reworked on the development branch.
Odoo 19.0VerifiedVerified against the shipped source.
Odoo 18.0VerifiedSame filtering and reload pattern.
Odoo 17.0VerifiedSame approach with older component conventions.
Odoo 16.0Not availableWidget does not exist.

Upgrade note. Present since Odoo 17. The filtering rules and the reload pattern have been stable across those versions.

What is changing in Odoo 20

Odoo 20 is expected at Odoo Experience in Brussels, 24 to 26 September 2026. The development branch is unstable and this may still change; we re-verify this page after the release.

Substantially reworked. The development branch changes the component with a large diff alongside the newer state conventions. The bulk dropdown and its filtering are what to expect to survive.

Common problems and fixes

SymptomCause and fix
Nothing happens on a bulk actionEvery selected work order was filtered out, so no call was made. Expected. Check whether they are done or already in that state.
Only one row changedNothing was selected, so the clicked record was used. Select the rows first.
Rows disappear after a changeThe list reloads and they no longer match the filter. Expected. Widen the filter to see them.
A state shows no colorIt is not one of the five mapped states. Expected fallback for custom states.
A done work order did not reopenDone work orders are filtered out deliberately. Expected. Reopen it from the work order itself.
The column is very narrowThe registration hints a width of twenty. Expected; the dropdown is meant to be minimal.

Work order dropdown vs the alternatives

WidgetBest forKey difference
mo_view_list_dropdownChanging work order states across a selection from a listFilters out work orders it should not move, and makes no call at all when none survive
mrp_should_consumeConsumption quantities on a componentA quantity rather than a state
mrp_timerTiming a work orderDuration rather than state
mrp_workorder_popoverWhy a work order is lateExplanation rather than action
workcenter_dashboard_graphWork center loadA chart rather than a control

Odoo's standard list multi-edit changes a field across a selection without any of this filtering, which is faster to configure and unsafe for states with rules attached. The shop floor view is the alternative for operators rather than supervisors.

Frequently asked questions

Does it act on the selection or the row?+
On the selection when there is one, and on the clicked row when there is not, so it works whether or not anything is ticked.
Why did nothing happen?+
Every selected work order was filtered out: already in that state, already done, or belonging to a finished manufacturing order. No server call is made in that case.
Why does the list reload after every action?+
Because a state change can move a work order out of the current filter. The reload fetches the new state and the notification makes the list redraw.
What happens with a custom state?+
The color map returns an empty string for anything unmapped, so the row renders without a color rather than breaking.
Which versions have it?+
Odoo 17 onwards. The development branch reworks it substantially.

Manufacturing status the shop floor keeps current

Work order states only mean something if updating them is faster than not. We implement Odoo Manufacturing and the shop floor screens around it, on versions 16 through 19.

Book a free consultation

How this page was produced

The three-condition skip filter, the empty set short circuit, the two different selection fallbacks, the reload plus notify after every call, the state to color map with its empty fallback and the narrow listing width hint were read from the work order list dropdown source on the Odoo 19.0 branch. Version coverage comes from comparing the file across the 17.0 and 18.0 branches and its absence on 16.0, plus a comparison against the public development branch. Spotted an error? Tell us and we will correct the page.