Skip to main content
iVentureTeam

project_task_state_selection

The 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.

Siddharth JambukiyaSiddharth JambukiyaOdoo Techno-Functional Consultant
August 16, 2026Updated August 16, 20266 min read
Technical nameproject_task_state_selection
Field typesselection
Viewsform, kanban, list, activity, calendar
Form variantForm views get a rounded pill button and the Alt+F command instead of the plain icon toggler
Also registered astask_stage_with_state_selection composes it next to the stage field
Moduleproject
Used in core11 occurrences across 1 module: every task-facing view of project, from kanban and list to the sharing portal views
VersionsOdoo 20.0, Odoo 19.0, Odoo 18.0, Odoo 17.0, Odoo 16.0
No-code setupPartially. The widget appears automatically on task views; options need XML.
Alternativesstate_selection, selection_badge, priority, boolean_favorite

What the task state selector does

Odoo separates two ideas that project tools often blur: the stage is a column on the kanban board and belongs to the project, while the state is the small colored bubble on the card and belongs to the task itself. This widget renders that state. It extends the generic state_selection widget and hardcodes the project palette: a neutral bubble for In Progress, an orange exclamation for Changes Requested, a green bubble for Approved, a green check for Done, a red cross for Canceled and an hourglass for Waiting.

The dropdown is context-aware. A normal task offers all five settable states. A task in Waiting, which is a state the dependency system sets rather than a person, offers only Done and Canceled: the source builds the option list conditionally, so users cannot hand-set a working state on a task that is blocked by another.

What this means for your team

The two-track design solves a real reporting problem. Stages answer "where is this task in our process", states answer "does this task need attention". A task can sit in the Review column with Changes Requested, and a dashboard can count approval bottlenecks without caring which column each project uses. Teams migrating from Trello-style boards usually need this explained once, and then their standup gets faster because the cards say who is blocked.

The toggle mode matters for personal productivity use. On private tasks, the ones in your inbox with no project attached, the widget switches to a single-click check: click to complete, click to reopen. No dropdown, no ceremony. The same behavior can be forced on any view with one option, which is worth doing for to-do style lists where Done is the only state anyone sets.

One operational note: state changes save immediately by default, including the rest of the edited record. That is inherited behavior, and it is the right default on kanban cards, but on form views it means the state bubble is effectively a save button.

Supported options in Odoo 19

Verified against project_task_state_selection.js in the Odoo 19.0 project module. The widget adds one option of its own and inherits the rest from the generic state_selection descriptor it spreads.

OptionTypeWhat it does
is_toggle_modebooleanSingle click toggles between Done and In Progress instead of opening the dropdown. The same behavior activates automatically on tasks without a project.
autosavebooleanInherited from state_selection. Picking a state saves the whole record immediately, pending edits included. Set false to stage the change without saving.(default: true)
hide_labelbooleanInherited from state_selection. Hides the state label text next to the icon where the template would show it.

Waiting is not in the option list on purpose. No configuration makes Waiting user-settable from this widget: it appears in the label formatting but is excluded from the dropdown choices. The state is entered and left by the task dependency machinery, so if a task is stuck in Waiting, the fix is on its blocking tasks, not on this field.

Working examples

How core places it on the task list

<field name="state"
       widget="project_task_state_selection"
       nolabel="1"/>

Forcing single-click toggle on a custom to-do view

<field name="state"
       widget="project_task_state_selection"
       options="{'is_toggle_mode': True}"/>

With the toggle active, a click flips Done to In Progress and back. The dropdown with all states remains reachable in views where the widget renders the chevron.

Keeping the record out of autosave

<field name="state"
       widget="project_task_state_selection"
       options="{'autosave': False}"/>

Inherited from the base widget: with autosave off, picking a state only stages the change and the user saves manually.

Why the bubble behaves differently per view

Reading the source explains three behaviors that look odd from the outside.

The styling is view-dependent, decided in code. On kanban, list, activity and calendar views, and on small screens, the widget renders a borderless icon button. On desktop form views it renders a rounded pill whose border color follows the current state, and it highlights while hovered. None of this is configurable; the methods check the view type directly.

The command palette integration is form-only. When the widget mounts on a form view it registers a "Set state as..." smart action under Alt+F, listing exactly the states the dropdown would offer. On every other view type the command is not registered, and the widget instead runs the base setup.

Toggle mode has two triggers. The explicit is_toggle_mode option, or the task having no project_id. That second trigger is why the widget declares a field dependency on project_id: private tasks get the one-click check without any configuration.

Version compatibility

VersionStatusNotes
Odoo 20.0In developmentNot released. Icon set and view-name changes are visible on the development branch; options unchanged. Details below.
Odoo 19.0VerifiedVerified against the shipped source and tested on a clean database.
Odoo 18.0VerifiedByte-identical component apart from the removed module pragma.
Odoo 17.0VerifiedSame state model and widget behavior.
Odoo 16.0Partial / changedTask states in their current 6-value form landed in 17.0; 16.0 used kanban_state instead.

Upgrade note for 18 to 19. The component is byte-identical between 18.0 and 19.0 apart from the removed module pragma, so views and customizations carry over as they are. The 6-state selection on the task model is likewise stable across both versions.

What is changing in Odoo 20

Odoo 20 is expected at Odoo Experience in Brussels, 24 to 26 September 2026. These notes come from the public development branch, which can change until feature freeze; we re-verify this page against the shipped release.

The visible changes are cosmetic but will matter to anyone who patched the component. The FontAwesome icons are replaced by the new icon set: Changes Requested moves to an error glyph, Done to check_circle, Canceled to cancel and Waiting to hourglass_empty, with a parallel new classIcons map controlling the oi icon classes. The view-type checks swap kanban for card, following the kanban-to-card rename across the web client, and small-screen detection moves from env.isSmall to the ui service.

Option-wise nothing moves: is_toggle_mode and the inherited autosave and hide_label survive unchanged.

Common problems and fixes

SymptomCause and fix
The dropdown only offers Done and CanceledThe task is in the Waiting state, which the dependency system controls. Complete or cancel the blocking tasks; the working states reappear once the task leaves Waiting.
Clicking the bubble completes the task instead of opening the dropdownToggle mode is active, either via is_toggle_mode or because the task has no project. Expected on private tasks. Remove the option or assign a project for dropdown behavior.
Changing state saved the whole recordInherited autosave defaults to true. Set options="{'autosave': False}" where immediate saves are unwanted.
Alt+F does nothing on the kanban viewThe command is registered only when the widget mounts on a form view. Open the task form; the command palette entry is available there.
The widget shows a plain selection dropdown on my custom modelThe state values are hardcoded to project.task's selection keys, so foreign selections match no icons. Use the generic state_selection widget for non-task models.

Task state selector vs the alternatives

WidgetBest forKey difference
project_task_state_selectionThe task state bubble on anything rendering project.taskProject-specific icons, waiting-state lockout and private-task toggle
state_selectionThe same icon-plus-dropdown pattern on any selection fieldGeneric three-state styling, no project logic
selection_badgeChoosing one value from a short list as visible badgesAll options rendered flat, no icons or dropdown
priorityStar-based importance ranking next to the stateStars over a selection, with the same autosave-by-default behavior
boolean_favoriteA single done-or-not flag with no intermediate statesBoolean toggle rendered as a star

If your model is not a project task, do not borrow this widget: its states, icons and waiting logic are hardcoded to the task model. The generic state_selection gives you the same interaction pattern on any selection field.

Frequently asked questions

What is the difference between task stages and task states in Odoo?+
Stages are the kanban columns and belong to each project; states are the colored bubble on the task and are the same six values everywhere: In Progress, Changes Requested, Approved, Waiting, Done, Canceled. This widget renders the state. Cross-project reporting should filter on states, not stages.
Why can I not set a task back to In Progress?+
The task is in Waiting, set by task dependencies. The widget deliberately offers only Done and Canceled for waiting tasks. Clear or complete the blocking tasks and the full dropdown returns.
How do I make the task state a one-click done toggle?+
Set options="{'is_toggle_mode': True}" on the field. Tasks without a project get this behavior automatically, which is why private to-dos complete with a single click.
Does changing the state save the record?+
Yes, by default. The widget inherits autosave: true from state_selection, and the save includes any other pending edits on the record. Disable it with options="{'autosave': False}" if that is not what you want.
Is there a keyboard shortcut for setting the task state?+
On the task form view, Alt+F opens a "Set state as..." entry in the command palette listing the available states. The command is not registered on kanban or list views.
Will Odoo 20 change the task state widget?+
The development branch shows an icon-set swap (FontAwesome to the new oi glyphs), the kanban view check renamed to card, and internal API updates. Options are unchanged. Nothing is final until the September 2026 release, and we re-verify after it ships.

Making Odoo Project fit how your team runs?

Custom task lifecycles, dependency rules, approval states that mean something in your reports: project workflows are where off-the-shelf Odoo needs shaping. We tailor Odoo Project for delivery teams, from state logic to portal sharing.

Shape your project workflow

How this page was produced

This page was verified by reading project_task_state_selection.js and its base state_selection_field.js on the Odoo 19.0 branch, diffing against 18.0 (identical) and the development branch (icon set and view-name changes), and exercising the widget on a clean Odoo 19 database, including the Waiting-state dropdown reduction. Corrections are welcome via our contact page.