Skip to main content
iVentureTeam

subtask_kanban_list

The open sub-tasks on a task's kanban card, each with an editable state, plus an inline field for adding another.

Siddharth JambukiyaSiddharth JambukiyaOdoo Techno-Functional Consultant
August 27, 2026Updated August 29, 20264 min read
Technical namesubtask_kanban_list
Viewskanban (view widget, <widget> element)
Moduleproject, the Project app
Used in coreThe task kanban board in project
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
Alternativessubtask_counter, subtasks_one2many, project_task_state_selection

What the kanban sub-tasks does

On a kanban board, a task with sub-tasks is a task whose real status lives one level down. Showing the sub-tasks on the card is the difference between a board you can read and one you have to click through.

This widget does that, with two useful restrictions. It shows only the open ones, because a finished sub-task is not information anyone needs on a board. And each row carries a working state field, so a sub-task can be moved along without leaving the card.

It also creates. A small inline input adds a sub-task directly, inheriting the parent's project and assignees.

What this means for your team

Boards stop being used when they stop being accurate, and the usual cause is that updating a status costs a navigation. Editable state on the card removes that cost for the level where most of the churn happens.

The inline creation is worth a word of caution in process terms: it makes adding a sub-task nearly free, which is good for capture and bad for scope if nobody prunes.

Supported options in Odoo 19

The widget takes the standard view widget props plus an optional read-only flag. What it filters, caches and writes is described below. Read from the sub-task kanban list source, Odoo 19.0.

OptionTypeWhat it does
isReadonlyoptional propDeclared on the component. Governs whether the card offers editing.
the state filterbuilt into the getterHides sub-tasks whose state means done or canceled.
the count cacheoptimizationThe filtered list is only rebuilt when the record count changes.
the runtime field informationbuilt by the widgetNames the task state selection widget and a view type, producing a working state field inside the card.

The filter result is cached deliberately. It is only recomputed when the record count changes, which keeps a board of many cards from refiltering on every render. The consequence is that a state change alone does not remove a row until the count moves.

Working examples

Placing it

<widget name="subtask_kanban_list"/>

Inside a kanban card template.

What is hidden

# states meaning done and canceled

Everything else is shown.

What a new sub-task inherits

parent, project, assignees,
sequence = highest + 1

Created directly, no form.

A cache with a visible consequence

The caching getter is the part worth understanding. It compares the current record count against a remembered one; if they match and the initial load is done, it returns the previously filtered array untouched. Only a change in count triggers a refilter.

That is a real optimization on a busy board, and it has a visible consequence: closing a sub-task changes its state but not the count, so the row stays until something adds or removes a record. Reading the code is the only way to know that, which is why it is worth stating.

The state field is built at runtime rather than declared in a view. The widget assembles the field information itself, naming the selection widget used for task states and setting the view type, which is what allows a fully functional field to appear inside a widget that has no view definition of its own.

Creation is a direct record creation rather than a form. The sequence is computed as one above the highest currently present, so the new sub-task sorts to the bottom. The parent's project and assignees are copied across, and an empty name is refused with a notification before anything is written.

Version compatibility

VersionStatusNotes
Odoo 20.0Partial / changedNot released. Newer conventions and the view type renamed from kanban to card.
Odoo 19.0VerifiedVerified against the shipped source.
Odoo 18.0VerifiedSame filtering, caching and inline creation.
Odoo 17.0VerifiedSame approach with older component conventions.
Odoo 16.0Not availableWidget does not exist.

Upgrade note. Present since Odoo 17. The filtering, the caching and the inline creation 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.

Newer conventions, and a renamed view type. The development branch swaps the state hooks for their Owl 3 equivalents and changes the runtime field's view type from kanban to card, following the wider view renaming. The filtering and creation logic are unchanged.

Common problems and fixes

SymptomCause and fix
A closed sub-task stays on the cardThe filter is cached and only rebuilt when the record count changes. Reload the board; the state change alone does not move the count.
Creating refuses with a notificationThe name was empty or whitespace only. Type a name; blank records are refused deliberately.
A new sub-task appears at the topIt should not; the sequence is one above the current highest. Check the board's own ordering.
The new sub-task has no projectThe parent task has none to inherit. Set the project on the parent first.
The state cannot be changedThe read-only flag is set on the widget. Check how the card template passes it.
The widget is missingThe Project module is not installed in that database. Install Project.

Kanban sub-tasks vs the alternatives

WidgetBest forKey difference
subtask_kanban_listShowing and updating open sub-tasks directly on a kanban cardA cached filter of open sub-tasks with a runtime-built state field and inline creation
subtask_counterSub-task progress in a listA counter rather than rows
subtasks_one2manySub-tasks on the task formA full relation for bulk editing
project_task_state_selectionThe state field itselfThe field this widget builds at runtime

The sub-task counter is the compact alternative for lists, showing progress without the rows. The sub-task relation on the form is where bulk editing belongs.

Frequently asked questions

Which sub-tasks are shown?+
Only the open ones. States meaning done and canceled are filtered out, because a finished sub-task is not information a board needs.
Why does a closed sub-task stay visible?+
The filtered list is cached and only rebuilt when the record count changes, so a state change alone does not remove the row until something is added or removed.
How does the state field work inside a widget?+
The widget assembles the field information at runtime, naming the task state selection widget and a view type, which produces a working field without a view definition.
What does a new sub-task inherit?+
The parent task, its project and its assignees, plus a sequence one above the current highest so it lands at the bottom.
Which versions have it?+
Odoo 17 onwards. The development branch renames the runtime view type from kanban to card alongside the wider view renaming.

Boards that reflect what is actually happening

Kanban only helps when updating a status is faster than not updating it. We design Odoo Project boards and sub-task structures around your team's real cadence, on versions 16 through 19.

Book a free consultation

How this page was produced

The done and canceled state filter, the count-based caching getter, the runtime field information naming the task state selection widget, the sequence computed as one above the highest and the empty name notification were read from the sub-task kanban list 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.