Skip to main content
iVentureTeam

list_activity

The Next Activity column in Odoo list views, the little clock with a summary next to it, is the list_activity widget. It has no options at all; everything it shows comes from six activity fields it loads for you.

Siddharth JambukiyaSiddharth JambukiyaOdoo Techno-Functional Consultant
August 12, 2026Updated August 12, 20265 min read
Technical namelist_activity
Field typesone2many (always activity_ids)
Viewslist
Modulemail, installed in practically every Odoo database
Used in core21 occurrences across 13 modules, including account, project, purchase, hr_expense, hr, sale
VersionsOdoo 20.0, Odoo 19.0, Odoo 18.0
No-code setupNo. Added in list view XML on activity_ids (core list views ship it already)
Alternativeskanban_activity, activity_exception

What the List Activity widget does

Odoo tracks follow-ups as activities: calls to make, emails to send, tasks to do, each with a deadline and an assignee. list_activity is how that system surfaces inside list views. On each row it renders one compact cell: a clock icon colored by the state of the record's next activity, and a short text summarizing it.

The widget is placed on the activity_ids one2many that every model inheriting mail.activity.mixin has. It supports only that shape: supportedTypes in the source is ["one2many"], and the component reads its display data not from the o2m itself but from six sibling fields it loads automatically.

There is deliberately nothing to configure. The descriptor declares no options, so the widget looks and behaves identically in every list in Odoo, which is exactly the point: one glance, same meaning, everywhere.

What this means for your team

List views are where operational follow-up actually happens: the AR clerk scanning overdue invoices, the sales manager scanning the pipeline. The activity column answers the only question that matters in that scan, what is the next step and is it late, without opening a single record.

The color coding does the heavy lifting. An overdue activity shows red, today shows orange, planned shows green, and the colors come from the shared activity component, so they mean the same thing in list, kanban and form chatter. Teams that learn to sort or filter by activity state (the searchable activity_state field this widget depends on) turn lists into working queues.

Because the widget is options-free, there is no per-view tuning to maintain. If your process needs different information in the cell, that is a customization of the activity data itself, the summary, the type, the exception flags, not of the widget.

Working examples

The standard column

<list>
    <field name="partner_id"/>
    <field name="activity_ids" widget="list_activity"/>
    <field name="amount_total"/>
</list>

That is the whole integration. The six activity fields do not need their own elements; the widget declares them as dependencies.

Adding it to a custom model

# the model must inherit the activity mixin
class LibraryLoan(models.Model):
    _name = "library.loan"
    _inherit = ["mail.thread", "mail.activity.mixin"]

Without mail.activity.mixin the six dependency fields do not exist and the view fails to load.

Where each part of the cell comes from

The cell has two parts, and the source is precise about both.

The icon. A ListActivityButton subclass of the shared ActivityButton renders it. The subclass sets the default icon to fa-clock-o and clears the default state class, which is why you see a plain clock even on rows with no planned activity. When activities exist, the state drives the color, and an exception activity replaces the clock with the exception icon.

The text. The summaryText getter has a fixed precedence, straight from the source: if activity_exception_decoration is set the text is the word Warning; otherwise the next activity's activity_summary; otherwise the activity type's display name. If nothing is planned the cell shows only the clock.

The data. Six fieldDependencies are loaded with the row: activity_exception_decoration, activity_exception_icon, activity_state, activity_summary, activity_type_icon, activity_type_id. This is why the column works with a single field element in the XML, and why it costs six extra columns in the list's data fetch.

Clicking the cell opens the activity scheduler popover for the row, full width: the subclass renders the button with w-100 and truncates long summaries with text-truncate.

Version compatibility

VersionStatusNotes
Odoo 20.0In developmentNot released. No behavioral changes on the development branch; the clock icon moves to Odoo's new icon set. See below.
Odoo 19.0VerifiedVerified against the shipped source: zero options, six field dependencies.
Odoo 18.0VerifiedSame registration, same dependencies, same options-free design. Verified against the 18.0 source.

What is changing in Odoo 20

Odoo 20 is expected at Odoo Experience in Brussels, 24 to 26 September 2026. The changes below are read from the public development branch and are not final until release.

No options appear (the widget stays options-free) and the list_activity registration is unchanged. Two internal changes are visible: the component moves to the new Owl props system, and the default icon changes from FontAwesome's fa-clock-o to the schedule glyph of Odoo's own icon set, part of a codebase-wide icon migration. Expect the clock to look slightly different, not behave differently. We re-verify after release.

Common problems and fixes

SymptomCause and fix
View fails to load after adding the columnThe model does not inherit mail.activity.mixin, so the six dependency fields do not exist. Add mail.activity.mixin to the model's _inherit list, or drop the column.
Cell shows Warning instead of the activity summaryThe record has an exception activity; activity_exception_decoration takes precedence over everything else in the source. Resolve or unlink the exception activity; the normal summary returns.
Clock icon shows but no textNo activity is planned on the record; the widget always renders the clock. Nothing to fix. Schedule an activity and the summary appears.
Summary text is cut offThe button truncates with text-truncate to keep rows one line high. Hover the cell for the full title, or open the popover; long texts belong in the activity note.
Column is empty for some usersActivities are user-visible records; record rules on mail.activity can filter what each user sees. Check the activity's assigned user and your access rules.

List Activity widget vs the alternatives

WidgetBest forKey difference
list_activityA full next-activity column in list viewsOptions-free by design; icon, color and text all derive from six auto-loaded fields
kanban_activityThe same activity indicator on kanban cardsCard-oriented rendering of the same ActivityButton component
activity_exceptionShowing only exception warnings in a slim columnRenders nothing unless the record has an exception activity

The rule of thumb: list_activity for list rows, kanban_activity for kanban cards, and activity_exception when the list only needs the red flag moments, not the full activity summary.

Frequently asked questions

How do I add the activity column to a list view in Odoo?+
Add <field name="activity_ids" widget="list_activity"/> to the list view XML. The model must inherit mail.activity.mixin. No options exist for this widget.
Can I change what text appears next to the clock?+
Not through the widget, which has no options. The text follows a fixed precedence: exception Warning, then the activity summary, then the activity type name. Change the activity's summary to change the text.
What do the icon colors mean?+
The state of the next activity: overdue renders red, today orange, planned green, through the shared ActivityButton component. An exception activity replaces the clock with a warning icon.
Why does clicking the cell open a popover?+
That is built in. The cell is a button wired to the activity scheduler popover, the same one used in the chatter and kanban views, so users can schedule, edit or mark activities done without leaving the list.
Does the column slow down my list?+
It adds six extra fields to the list's data fetch (the declared field dependencies). On normal page sizes this is negligible; on very wide unpaginated lists it is one more reason to paginate.
Is there a form view equivalent?+
Activities on a form live in the chatter, which mail renders automatically. list_activity is registered only as a list-cell widget and is not meant for form views.

Are follow-ups falling through the cracks?

An activity column only helps if the activities behind it are real: right types, right assignees, automatic scheduling when documents change state. We wire Odoo's activity system into your sales, purchase and accounting flows so the next step is never a guess.

Book a free consultation

How this page was produced

This page was verified by reading list_activity.js and its QWeb template in the Odoo 19.0 mail module, including the summaryText precedence and the six declared field dependencies, and by comparing the same file on the 18.0 branch and the development branch (where the icon set change was found). Spotted an error or a version difference? Tell us and we will correct the page.