Skip to main content
iVentureTeam

many2many_tags_avatar

The avatar tags field renders people-type relations as pills with faces: each tag carries the record's avatar, and kanban cards get a quick-assign popover.

Siddharth JambukiyaSiddharth JambukiyaOdoo Techno-Functional Consultant
August 16, 2026Updated August 16, 20267 min read
Odoo 19 recruitment form where the many2many_tags_avatar widget renders the Interviewers field as avatar pills for Administrator, Ajay, Kamal and siddharth, above a plain colored Tags field.
Studio nameTags (avatar variant selected via the widget picker)
Technical namemany2many_tags_avatar
Field typesmany2many, one2many
Viewsform, list, kanban
Form variantThe base registration; form and list views add the command-palette assignment flow via withCommand
Also registered aslist.many2many_tags_avatar, kanban.many2many_tags_avatar, many2many_tags_avatar_popover
Moduleweb, present in every Odoo database
Used in core10 occurrences across 4 modules, including im_livechat, l10n_in, survey, hr_recruitment
VersionsOdoo 20.0, Odoo 19.0, Odoo 18.0, Odoo 17.0, Odoo 16.0
No-code setupPartially. Studio can add the field; selecting the avatar widget needs the developer-mode widget picker or XML.
Alternativesmany2one_avatar_user, many2many_tags, many2many_avatar_user, many2many_checkboxes

What the avatar tags field does

When the related records are people, a name-only pill wastes the fastest recognition channel humans have. The many2many_tags_avatar widget extends the standard Tags field so each pill renders the record's avatar_128 image before the name: survey interviewers, livechat operators, task collaborators. The autocomplete dropdown shows the same avatars while searching, so picking the right Ajay out of three is a face-match rather than a surname-match.

The file ships three registrations tuned per view. The base widget renders all pills. List views swap in a variant that shows at most 5 before collapsing the rest behind a "+N" counter, and kanban cards get a 3-pill variant where clicking opens a search popover for assigning people directly on the card.

What this means for your team

Assignment fields are the highest-traffic relational fields in most Odoo deployments: who is on this task, who interviews this candidate, who owns this ticket. Rendering them as faces cuts the scan time on a busy kanban board to nearly nothing, and the quick-assign popover is the difference between dragging cards to a colleague's attention and assigning them without leaving the board.

One behavior deserves a policy decision before rollout: the kanban popover saves immediately. Add a person on a card and the record writes then and there, with no draft state. That is right for dispatch-style boards, but it also means a mis-click assigns someone for real, notifications included if the model sends them. Teams that want deliberate assignment should keep editing on the form view, where normal save semantics apply.

Note the model side too: whatever the pills point at needs an avatar_128 field. Users, employees, partners and channels have one. A custom model of, say, review committees does not, unless you inherit the avatar mixin.

Setting it up in Odoo Studio (no code)

Odoo Studio gets you most of the way, with one catch at the end.

  1. Open the form in Studio and drag a Tags field from the Add a field panel onto the layout.

  2. Point it at a people model such as Users or Employees when Studio asks for the relation.

  3. Select the field and open Properties. The default widget is Tags, which renders plain pills without faces.

  4. To get the avatar variant, turn on developer mode first: the widget picker then lists technical widgets, and you can choose many2many_tags_avatar. Without developer mode, the avatar variant is not offered for a generic tags field, and the change belongs in XML.

What Studio cannot do here

Everything the plain Tags field cannot do in Studio applies here unchanged: restricting the selectable people with a domain, blocking creation with no_create, or making the list depend on another field all need view-level work.

Two avatar-specific limits come on top. The image is hardcoded to avatar_128, so pointing the widget at a model without that field leaves broken image placeholders, and no Studio switch changes the source field. And the per-view pill limits, 5 in lists and 3 on kanban cards, are class constants in the source with no option to override them.

Supported options in Odoo 19

Verified against many2many_tags_avatar_field.js in the Odoo 19.0 web module. The widget declares no options of its own: everything below is inherited from the Tags descriptor it spreads, and all of it was re-checked against this widget's extractProps.

OptionTypeWhat it does
no_createbooleanInherited from Tags. Removes creation entirely from the dropdown. Note the kanban popover already blocks creation regardless.
no_quick_createbooleanInherited from Tags. Removes only the inline create-from-typed-text entry.
no_create_editbooleanInherited from Tags. Removes only the Create and Edit popup entry.
createdomainInherited from Tags. A domain evaluated against the current record that enables creation conditionally.
search_thresholdnumberInherited from Tags. Minimum characters typed before the search RPC fires.
placeholder_fieldfield nameInherited from Tags. A char field on the current record supplying a dynamic placeholder.
create_name_fieldfield nameInherited from Tags and undocumented: which field of the related model receives the typed text on inline creation.(default: name)
color_fieldfield nameInherited from Tags but effectively inert here: the avatar variant empties the extra data specification and shows an image instead of a color chip.

The color options are technically inherited but pointless here. The avatar variant overrides its data specification so the color subfield is not fetched, and the pill template shows an image where the color chip would matter. Configure people-picking behavior, not colors, on this widget.

Working examples

Interviewers on a survey, as core ships it

<field name="restrict_user_ids"
       widget="many2many_tags_avatar"/>

Assignable people, locked to existing users

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

Internal users only, no accidental partner creation from a typo. This is the configuration most assignment fields should ship with.

Delaying search on large user bases

<field name="member_ids"
       widget="many2many_tags_avatar"
       options="{'search_threshold': 2}"/>

Inherited from the Tags field: no query fires until two characters are typed, which is worth setting on databases with thousands of users.

Inside the kanban quick-assign machinery

The kanban variant is really three cooperating pieces, and knowing them explains its quirks.

The popover is its own registered widget. many2many_tags_avatar_popover wraps the field with save-on-change behavior: every add or delete calls record.save({ reload: false }) immediately. The kanban tags list opens that popover when clicked, passing canCreate: false, canCreateEdit: false and canQuickCreate: false hardcoded, which is why no create option you set ever resurfaces creation inside the card popover.

Pill order flips on cards. Both the kanban variant and the popover reverse the tag list, so the most recently added person renders first where space is tightest.

The command palette knows about this widget. extractProps sets withCommand on form and list views, wiring the assign-to-me style palette commands. On kanban the popover takes over that role instead.

The avatar URL is built with imageUrl(relation, resId, "avatar_128"), one image request per pill, served from the standard image route with access rights applied. If the browsing user cannot read the related record's image, the pill falls back to the placeholder silently.

Version compatibility

VersionStatusNotes
Odoo 20.0In developmentNot released. Kanban-to-card rename, popover deregistration and avatar cache busting are visible on the development branch; details below.
Odoo 19.0VerifiedVerified against the shipped source.
Odoo 18.0VerifiedSame options and per-view behavior; dropdown avatars use a different internal component.
Odoo 17.0VerifiedFull popover architecture present; kanban cards cap at 2 visible pills instead of 3.
Odoo 16.0Partial / changedAvatar pills render, but the kanban quick-assign popover does not exist yet.

Upgrade note for 18 to 19. Odoo 18 rendered the dropdown avatars through a dedicated AvatarMany2XAutocomplete component; 19 does the same job with an option template on the standard autocomplete. Pure internals for users, but a JavaScript patch targeting the 18 component class will not find it in 19.

What is changing in Odoo 20

Odoo 20 is expected at Odoo Experience in Brussels, 24 to 26 September 2026. Everything below is read from the public development branch, which stays unstable until feature freeze; we re-verify this page against the shipped release.

The kanban registration is renamed to card.many2many_tags_avatar as part of the web client's kanban-to-card overhaul, and the standalone popover registration disappears: the popover becomes an internal class the card variant references directly. Views that referenced many2many_tags_avatar_popover as a widget name will need review.

Avatar URLs gain cache busting. The widget adds write_date to its fetched fields and appends it to the image URL, so changed profile photos show up without a hard refresh, matching what many2one_avatar_user got in 19.

Pill limits move into props. The hardcoded visible-item constants become a tagLimit prop, with the list default at 5 and the card default at 2, and the popover shows all. A new AvatarTag component replaces the tags-list templates, and the delete cross renders only when the field is editable.

Common problems and fixes

SymptomCause and fix
Pills show gray placeholder circles instead of facesThe related model has no avatar_128 field, or the user lacks read access to the images. Point the field at a model with the avatar mixin, or accept placeholders; the image field is not configurable.
Only 3 people show on kanban cardsThe kanban variant caps visible pills at 3 and collapses the rest into a counter. Expected. The full set is visible in the popover or on the form view; the cap is a class constant, not an option.
Users cannot create new people from the kanban popoverThe popover hardcodes creation off, independent of create options. Create the person first, or assign from the form view where your create options apply.
Adding someone on a card saved the record instantlyThe popover saves on every change by design. Train for it, or restrict assignment editing to the form view if immediate writes are unacceptable.
Tag colors are not showing despite color_fieldThe avatar variant does not fetch or render the color subfield. Use plain many2many_tags when colors matter more than faces.
Avatar changes do not appear until a hard refreshIn Odoo 19 the avatar URL carries no cache-busting parameter. Known limitation; the development branch adds write_date busting for Odoo 20.

Avatar tags field vs the alternatives

WidgetBest forKey difference
many2many_tags_avatarMulti-person assignment fields: collaborators, interviewers, operatorsTags pills with avatar images and a kanban quick-assign popover
many2one_avatar_userSingle-assignee fields pointing at usersOne avatar, user-specific extras like presence and assign-to-me
many2many_tagsNon-people relations where a name and color sufficeColor chips instead of avatars, color picker on forms
many2many_avatar_userUser fields wanting avatar rows plus user commandsUser-model specific variant with popover save semantics on kanban and list
many2many_checkboxesShort fixed people lists picked by tickingEvery option visible as a checkbox, no search, no avatars

The decision is usually between this widget and many2one_avatar_user: one face or several. If only one person can hold the role, use the many2one variant and you get presence indicators; if it is a crowd, this widget is the right pill row.

Frequently asked questions

What does the many2many_tags_avatar widget do?+
It renders a many2many or one2many relation as tag pills that each carry the related record's avatar_128 image, with view-specific variants: up to 5 pills in list views, up to 3 on kanban cards with a quick-assign popover, and all pills on forms.
Which models work with the avatar tags widget?+
Any model exposing an avatar_128 image field: users, employees, partners, livechat channels and anything inheriting the avatar mixin. On models without it the pills render placeholder images, because the image field name is hardcoded in the widget.
Can users create new records from the avatar tags dropdown?+
On form and list views, yes, subject to the inherited create options such as no_create. In the kanban popover, never: the popover hardcodes all three creation flags off in the source.
Why did adding a person on the kanban card save the record?+
The kanban quick-assign popover wraps the field with save-on-change behavior, calling record.save() after every add or remove. It is designed for dispatch boards where assignment should stick immediately.
How is this different from many2many_avatar_user?+
many2many_tags_avatar is the generic widget for any avatar-bearing model. many2many_avatar_user is the user-specialized cousin with user commands and slightly different per-view caps. For fields pointing at res.users, either works; core leans on the user variant.
What changes in Odoo 20 for this widget?+
On the development branch the kanban registration becomes card.many2many_tags_avatar, the standalone popover registration is removed, avatar URLs gain write_date cache busting, and pill limits become a tagLimit prop (list 5, card 2). All of it is unreleased until September 2026, and we re-verify after launch.

Boards that assign work in one click?

Quick-assign popovers, workload-aware assignment rules, avatars on your own models: small UX upgrades that change how fast a team dispatches work. We build custom Odoo kanban and assignment flows that make the board the only tool your team needs.

Upgrade your team's boards

How this page was produced

This page was verified by reading many2many_tags_avatar_field.js on the Odoo 19.0 branch, diffing against 18.0 and the development branch, and re-checking the inherited option set against the Tags descriptor it spreads. The screenshot is a recruitment interviewers field on a clean Odoo 19 database. The kanban save-on-change and hardcoded no-create behaviors are read directly from the popover source. Corrections welcome via our contact page.