many2many_avatar_employee
Employee pickers in Odoo HR render as avatar pills through many2many_avatar_employee, a widget whose defining trick is deciding which employee model you are really looking at.
| Technical name | many2many_avatar_employee |
|---|---|
| Field types | many2many |
| Views | form, list, kanban, activity |
| Also registered as | kanban.many2many_avatar_employee, activity.many2many_avatar_employee, list.many2many_avatar_employee |
| Module | hr |
| Used in core | 3 occurrences across 2 modules: hr_holidays allocation wizards and hr |
| Versions | Odoo 20.0, Odoo 19.0, Odoo 18.0, Odoo 17.0, Odoo 16.0 |
| No-code setup | No. Applied via the widget attribute in view XML |
| Alternatives | many2many_avatar_user, many2one_avatar_employee, many2many_tags_avatar, many2many_tags |
What the Employee avatars field does
What this means for your team
Supported options in Odoo 19
| Option | Type | What it does |
|---|---|---|
relation | model name | The variant's own option: pins the widget to an explicit model, bypassing the hr.group_hr_user switch between hr.employee and hr.employee.public. Present since 16, where it overrode the then-hardcoded public model. |
no_create | boolean | Inherited from the tags family. Removes the remaining creation route, the Create and Edit dialog, making the picker select-only. |
no_create_edit | boolean | Inherited from the tags family. Removes only the dialog-based creation entry. |
no_quick_create | boolean | Inherited but effectively always on: the base variant hardcodes canQuickCreate false after spreading inherited props, so typed-text creation is disabled regardless. |
search_threshold | number | Inherited from the tags family since 19. Minimum characters typed before the employee search fires; without it the dropdown searches on focus.(since Odoo 19.0) |
placeholder_field | field name | Inherited from the tags family. A char field on the current record supplying a dynamic placeholder for the input.(since Odoo 19.0) |
Creation options are mostly moot here. The base variant hardcodes canQuickCreate: false after spreading the inherited props, so no_quick_create is already the permanent reality. A tags-style color_field is accepted by the schema but pointless: the avatar variants drop the color fetch from their data specification.
Working examples
From hardcoded model to group-aware switch
Version compatibility
| Version | Status | Notes |
|---|---|---|
| Odoo 20.0 | Partial / changed | Not released. kanban variant renamed to card, activity registration repointed, search placeholder added; details below. |
| Odoo 19.0 | Verified | Verified against the shipped source. Avatar card popover, list variant, and activity registration are new this release. |
| Odoo 18.0 | Partial / changed | Group-aware model switch present; no avatar card popover, list variant, or activity registration. |
| Odoo 17.0 | Partial / changed | EmployeeFieldRelationMixin introduced; same feature set as 18. |
| Odoo 16.0 | Partial / changed | Relation hardcoded to hr.employee.public for all users, overridable via the relation option. |
Upgrade note for 16 to 17+. HR users started seeing hr.employee instead of the public model, which can change what the picker returns under company-specific record rules. Views themselves need no changes; the widget name and options carried over.
What is changing in Odoo 20
Common problems and fixes
| Symptom | Cause and fix |
|---|---|
| Different users see different employees in the picker | The widget targets hr.employee for HR users and hr.employee.public for others, and record rules on each model differ. Expected. Pin a model with the relation option if both audiences must match. |
| Typing a new name does not offer to create the employee | canQuickCreate is hardcoded false in the descriptor. By design; create employees in the Employees app. Custom widgets can lift the restriction deliberately. |
| Clicking an avatar does nothing on Odoo 17 or 18 | The employee card popover override is new in Odoo 19. Upgrade, or accept pills without cards on older versions. |
| color_field option has no visible effect | The avatar variants drop the color fetch from their data specification. Colors are not part of this widget family; use many2many_tags for colored pills. |
| A patch on kanban.many2many_avatar_employee stops working after Odoo 20 | The development branch renames the registration to card.many2many_avatar_employee. Target the new registry key when migrating, and retest the activity view which now uses the card variant. |
| Not all assigned employees show on kanban cards | The inherited avatar display caps visible avatars with a counter for the rest. Expected; open the record or the counter popover for the full list. |
Employee avatars field vs the alternatives
| Widget | Best for | Key difference |
|---|---|---|
many2many_avatar_employee | Multi-employee pickers in HR flows | Resolves hr.employee vs hr.employee.public per user, creation off |
| many2many_avatar_user | Assignee pickers on res.users fields | User model, assign-me command support, quick create rules differ |
| many2one_avatar_employee | Single-employee fields | Same model switch for exactly one pick |
| many2many_tags_avatar | Avatar pills on any model with an image | No employee model logic, no group switch |
| many2many_tags | Relations where photos add nothing | Plain colored pills, creation enabled by default |
Frequently asked questions
Why does the widget sometimes query hr.employee.public instead of hr.employee?+
Can users create a new employee from the picker?+
What do the avatar cards show, and who gets them?+
Does it work on models other than employees?+
What changed for this widget across recent versions?+
Why do avatar colors from my color field not appear?+
HR data that respects who is asking?
Employee visibility, public profiles, and multi-company record rules decide what every HR screen shows. We implement Odoo HR with the access design done right, from employee models to the widgets on top, on Odoo 16 through 19.
Book a free consultation