task_stage_with_state_selection
In 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.
| Technical name | task_stage_with_state_selection |
|---|---|
| Field types | many2one |
| Views | list (core), form |
| Module | project |
| Used in core | 2 occurrences across 1 module: the task list view and the project sharing task list in project |
| Versions | Odoo 20.0, Odoo 19.0, Odoo 18.0 |
| No-code setup | No. Applied in XML; Studio does not list it |
| Alternatives | many2one, project_task_state_selection, statusbar_duration |
What the Stage with state widget does
What this means for your team
Supported options in Odoo 19
| Option | Type | What it does |
|---|---|---|
state_readonly | boolean | Controls whether the state icon half is interactive. Defaults to true, so the icon is display-only; pass {'state_readonly': False} to let users change the task state from the same cell. The stage half's editability follows the record as usual. Removed on the Odoo 20 development branch.(default: true)(since Odoo 18.0) |
Many2one options do not work here. The descriptor is a bare component, not a spread of the m2o field descriptor, and its extractProps reads only state_readonly and the view type. no_open, no_create, no_quick_create and friends are silently discarded, a trap because the field it sits on is a many2one and the syntax looks like it should work.
Working examples
Inside the composite: two widgets sharing one cell
Version compatibility
| Version | Status | Notes |
|---|---|---|
| Odoo 20.0 | In development | Not released. The state_readonly option is deleted on the development branch; see below. |
| Odoo 19.0 | Verified | Verified against the shipped source; internal Many2One composition rewrite, same behavior. |
| Odoo 18.0 | Verified | Widget introduced with the state_readonly option. |
| Odoo 17.0 | Not available | Widget does not exist; task lists showed a plain stage column. |
| Odoo 16.0 | Not available | Widget does not exist. |
Upgrade note. Views from Odoo 18 carry to 19 unchanged. Coming from 16 or 17, where the widget does not exist, the equivalent list column was a plain stage_id field; add the widget name during migration if you want the state icon in the column.
What is changing in Odoo 20
Common problems and fixes
| Symptom | Cause and fix |
|---|---|
| no_open or no_create in options has no effect | The composite descriptor extracts only state_readonly and viewType; many2one options are never read. Use a plain many2one widget if you need those options, or accept the defaults with this one. |
| The state icon shows but cannot be clicked | state_readonly defaults to true. Pass options="{'state_readonly': False}" on the field. |
| The widget shows no state icon at all | The companion field is hardcoded to state; on models without a state selection the inner widget has nothing to render. Use it on project.task or a model that defines the same state field; the name cannot be remapped. |
| Only Done and Canceled appear in the state dropdown | Inherited project_task_state_selection behavior for tasks in the waiting state, where dependencies control progress. Expected; resolve the blocking dependency to regain the full state list. |
| The state name never displays, only the icon | The composite passes showLabel false to the state component unconditionally. By design; render a separate state field with hide_label False if you need the text. |
Stage with state widget vs the alternatives
| Widget | Best for | Key difference |
|---|---|---|
task_stage_with_state_selection | Task list columns that should show the stage and the state icon together | Composite of a many2one and a hardcoded state selection in one cell, with one readonly switch |
| many2one | A plain stage column with the full m2o option set | One field only, but no_open, no_create and friends actually work |
| project_task_state_selection | The task state on its own, in kanban footers or form title areas | The inner state component used alone, with its toggle and dropdown modes |
| statusbar_duration | Stage display on the task form with time-in-stage numbers | Form-oriented stage bar with durations rather than a compact list cell |
Frequently asked questions
What does the task_stage_with_state_selection widget do?+
Can I choose which field the state icon reads?+
Why are my many2one options ignored on this widget?+
How do I let users change the task state from the list?+
What changes for this widget in Odoo 20?+
Task lists that show status at a glance?
We build project workspaces where lists, kanbans and dashboards carry exactly the signals your team triages by: stages, approval states, blockers and aging, tuned per role, on Odoo 16 through 19.
Design my task views