Skip to main content
iVentureTeam

many2one_avatar_user

The assignee field with a face: many2one_avatar_user renders a user link as an avatar with online presence and chat access, and wires up the Assign to me command.

Quick summary

  • Renders a many2one pointing at users as an avatar plus name instead of a plain link; hovering shows presence and a chat shortcut.
  • In form and list views it registers the Assign to me command, so pressing Ctrl+K and typing "assign" sets the field to you.
  • It inherits every standard many2one option: no_open, no_create, no_quick_create, no_create_edit, search_threshold, placeholder_field.
  • One verified quirk: outside the form view the record link is off by default; pass no_open: False explicitly to enable it in lists.
  • The dropdown itself is avatar-aware, showing faces while you search.
  • Used 157 times across 40 core modules, anywhere a person is responsible for a record.
  • Odoo 20's development branch adds avatar cache-busting via the user's write_date, so changed profile photos show immediately.
Studio name(applied via the widget selector on user fields)
Technical namemany2one_avatar_user
Field typesmany2one
Viewsform, list, kanban, activity
Modulemail (Discuss), installed in practically every database
Used in core157 occurrences across 40 modules, including mail, crm, hr, hr_recruitment, project, website_slides
VersionsOdoo 20.0, Odoo 19.0, Odoo 18.0, Odoo 17.0, Odoo 16.0
No-code setupPartly: pick the widget on an existing user field in Studio's Properties panel
Alternativesmany2one_avatar, many2many_avatar_user, Default many2one, many2many_tags_avatar

What the avatar user field does

Anywhere Odoo shows a responsible person as a small round photo, a task's assignee, a lead's salesperson, an approval's manager, this widget is doing it. It takes a many2one to res.users and renders the user's avatar beside the name instead of a bare text link.

The avatar is not decoration. Hovering it surfaces the user's online status through Discuss presence, and opens a card with a direct message shortcut. The autocomplete dropdown is replaced too: while you search for a user you see faces next to names, which is materially faster in companies where half the sales team is named Patel.

The component builds on the standard many2one, so everything you know about that widget, searching, quick create, the internal link, applies here with the same options.

What this means for your team

Ownership is the difference between a record and a commitment. The moment a task, lead or ticket shows a face, someone is answerable for it, and everyone can see who without opening anything. Teams consistently report that boards with avatar columns get triaged faster than boards with name columns; the face is scanned, the text is read.

The Assign to me command this widget registers is the sleeper feature. A support agent working through a queue does not open each ticket's assignee dropdown; they hit Ctrl+K, type "assign", enter, next. Multiplied across a team and a day, this is minutes saved per person, and adoption of it is a good proxy for how comfortable your team actually is in Odoo.

For managers, presence on the avatar answers "is she online right now" without a Slack round trip, which matters for the handoffs that keep response-time SLAs honest.

Setting it up in Odoo Studio (no code)

Studio does not create this widget from the field palette, but applying it to an existing user field takes seconds.

  1. Open the form or list in Studio.

  2. Select the user field, for example Salesperson or Assigned to.

  3. In Properties, open the Widget dropdown and pick the avatar user entry.

New person fields are created as regular Many2one fields pointing at Users first, then switched to this widget the same way.

What Studio cannot do here

Studio sets the widget; the behavioral options stay XML-only.

Blocking user creation from the dropdown needs no_create; you rarely want a salesperson accidentally creating a login from a typo.

Making the avatar clickable in list views needs an explicit no_open: False, because outside the form view the link is disabled by default, a behavior specific to this widget.

Filtering which users are offered, for example only members of the project, is a domain on the field.

Supported options in Odoo 19

This widget declares no options of its own in many2one_avatar_user_field.js; it inherits the full set from the standard many2one via buildM2OFieldDescription. All of the below verified in many2one_field.js, Odoo 19.0 web module, plus two undocumented entries read from extractProps.

OptionTypeWhat it does
no_openbooleanControls the internal link to the user record. Unset, this widget enables the link only in form views; set False to force it on in lists, set True to disable it everywhere.(default: unset: link in form view only)
no_createbooleanRemoves user creation from the dropdown entirely. Overrides the two options below.
no_quick_createbooleanRemoves the inline Create "typed text" entry; creation through the popup form still works.
no_create_editbooleanRemoves the Create and Edit popup entry; inline creation still works.
search_thresholdnumberMinimum characters typed before the user search fires; without it the dropdown searches on focus.
placeholder_fieldfield nameA char field on the current record supplying a dynamic placeholder.
can_scan_barcodebooleanEnables barcode-scanner input for the field. Read in the inherited extractProps; appears in no options panel.
create_name_fieldfield nameWhich field receives the typed text on inline creation. Read in the inherited extractProps; undocumented.(default: name)

The link behavior differs from a plain many2one, verified in extractProps: when no_open is not set at all, the widget enables the link only in form views. A plain many2one is clickable everywhere by default; this one is deliberately quiet in lists and kanbans unless you opt in with no_open: False.

Working examples

Standard assignee field

<field name="user_id" widget="many2one_avatar_user"/>

List column, avatar clickable

<field name="user_id"
       widget="many2one_avatar_user"
       options="{'no_open': False}"/>

Without the explicit option, clicking the avatar in a list does nothing; this is the widget's own default, not a bug.

Locked-down assignee, no accidental user creation

<field name="user_id"
       widget="many2one_avatar_user"
       options="{'no_create': True}"
       domain="[('share','=',False)]"/>

The domain limits the dropdown to internal users, excluding portal accounts, and no_create stops typos becoming user records.

Delay the search on large user tables

<field name="user_id"
       widget="many2one_avatar_user"
       options="{'search_threshold': 2}"/>

The Assign-to-me command and presence

The command palette integration is wired in the component itself, verified in the source: when the view type is form or list, the widget calls useAssignUserCommand, which registers the Assign to me entry for the current record's field.

What that means in practice: with a task open, Ctrl+K (or Cmd+K) then typing "assign" offers Assign to me, and selecting it writes your user into the field, no mouse involved. In list views it applies to the focused row, which is what makes queue triage fast.

Two boundaries worth knowing. The command registers only on form and list views, not kanban, again straight from the source's viewType check. And it assigns the current user; "assign to my teammate" is still a dropdown interaction.

Presence, the green or grey dot, comes from Discuss (the mail module's presence service), so if a database somehow runs without mail, the widget family is not available at all; it lives in that module rather than in web.

Version compatibility

VersionStatusNotes
Odoo 20.0In developmentNot released. Adds avatar cache-busting via write_date in the development branch; see below.
Odoo 19.0VerifiedVerified against the shipped source and tested on a clean database.
Odoo 18.0VerifiedSame options and behavior. No XML changes needed.
Odoo 17.0VerifiedSame options and behavior. No XML changes needed.
Odoo 16.0VerifiedSame options and behavior. No XML changes needed.

Upgrade note. The registered name is stable, but the widget moved deeper into the mail module's view code over the versions, and in Odoo 19 it composes the shared Many2One component with an avatar-aware autocomplete. JavaScript patches on the old standalone implementation will need rework; XML carries over untouched.

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.

Avatars get cache-busting. The development version declares the user's write_date as a related field and keys the avatar URL on it, so when someone updates their profile photo, every view shows the new photo immediately instead of a stale cached one. A small change, but it closes a long-standing "the avatar didn't update" annoyance.

Options and registration are otherwise unchanged: the inherited many2one option set is the same and the widget keeps its name, so existing views should carry over untouched. Internals move to the new Owl props system, which only affects JavaScript patches. We re-verify this page against the shipped release before updating the table above.

Common problems and fixes

SymptomCause and fix
Clicking the avatar in a list view does nothingThis widget's own default: the record link is form-view-only when no_open is unset. Set options="{'no_open': False}" to enable the link in lists.
Assign to me does not appear in the command paletteThe command registers on form and list views only, and for the focused record. Focus the record's row or open the form; in kanban use the dropdown instead.
No presence dot on the avatarPresence comes from Discuss and shows for internal users the current user can see. Check the target is an active internal user, not a portal or archived account.
Typo created a new userQuick-create is on by default, and a user record is more consequential than a tag. Add no_create: True on assignee fields; consider a domain excluding share users.
Old profile photo keeps showingBrowser-cached avatar URL; Odoo 19 does not key the URL on the photo's change date. Hard-refresh for now. The Odoo 20 development branch fixes this with write_date cache-busting.

Avatar user field vs the alternatives

WidgetBest forKey difference
many2one_avatar_userOne responsible user on a record: assignee, salesperson, approverAvatar with presence and chat, plus the Assign-to-me command in form and list views
many2one_avatarA single partner or employee shown with a photoAvatar display only: no presence, no chat card, no assign command
many2many_avatar_userSeveral assignees on one recordMulti-value pills with avatars, the project-task Assignees pattern
Default many2oneAny relation where a face adds nothingPlain text link, clickable in every view by default
many2many_tags_avatarPeople as removable tags, such as attendeesTag pills with avatars on many2many fields

The practical test: one responsible person on a work item, use this widget. Several people, use the tags-with-avatars variant. A person who is not a system user, such as a customer contact, use the plain many2one_avatar on the partner field.

Frequently asked questions

How do I show the salesperson with an avatar in Odoo?+
Set widget="many2one_avatar_user" on the user field in the view, or in Studio select the field and pick the avatar widget under Properties, Widget. The field must point at Users (res.users).
What is the fastest way to assign a record to myself?+
With the record open, or its row focused in a list, press Ctrl+K (or Cmd+K on Mac) and type "assign", then pick Assign to me. The command is registered by this widget on form and list views.
Why is the avatar not clickable in my list view?+
Verified in the source: when no_open is not set, the widget enables the record link only in form views. Add options="{'no_open': False}" to make it clickable in lists.
Can I use this widget for employees instead of users?+
Not this one; it expects Users and its presence and command features are user-specific. For hr.employee fields use many2one_avatar_employee from the HR module, which renders the employee photo the same way.
How do I stop the dropdown offering portal users?+
Put a domain on the field such as [('share', '=', False)], which keeps only internal users. Pair it with no_create: True so typos cannot create accounts.
Does the green presence dot mean the person is working in Odoo?+
It reflects Discuss online presence: the user has an active session and is connected. It says nothing about which app they are using or whether they are active right now.

Building ownership into your workflows?

Assignee fields, approval chains and workload views only pay off when they match how your team actually routes work. We design and build assignment logic, filtered user domains and the automations around them on Odoo 16 through 19.

Book a free consultation

How this page was produced

The behavior was read from the Odoo 19.0 source in the mail module (many2one_avatar_user_field.js) together with the inherited option set in many2one_field.js (web module), including the extractProps code paths for the form-only default link and the form-and-list command registration. Confirmed on a clean Odoo 19 database, where the screenshot was captured. The Odoo 20 section is read from the public development branch and marked as unreleased. Spotted an error? Tell us and we will correct the page.

Get our monthly Odoo & automation digest

One short email per month with practical insights, version updates, and field-tested tips. No fluff, unsubscribe anytime.