Skip to main content
iVentureTeam

many2one_avatar_resource

This widget renders a link to a resource.resource with an avatar, distinguishing a person from a machine. It also reads an option Odoo never declares, and its click behavior changes depending on the view you put it in.

September 18, 2026Updated September 18, 20264 min read
Technical namemany2one_avatar_resource
Field typesmany2one (resource.resource)
Viewsform, list, kanban, card
Also registered askanban.many2one_avatar_resource in Odoo 19, renamed to card.many2one_avatar_resource in Odoo 20
Moduleresource_mail, installed with Planning, Field Service and similar apps
Used in core5 uses in Odoo 19 Community and Enterprise.
VersionsOdoo 19.0, Odoo 20.0
No-code setupNo. There is no Studio entry for this widget.
Alternativesmany2one_avatar_employee, many2one_avatar_user, many2one_avatar, many2many_avatar_resource

What the many2one_avatar_resource widget does

A resource.resource can be a person or a piece of equipment. This widget renders the link to one with an avatar that reflects which, so a planning row reads at a glance rather than requiring you to know the names.

It is built with buildM2OFieldDescription, so it behaves like a normal many2one for search and selection, and adds the o_field_many2one_avatar class for styling.

To know which kind of resource it is looking at, it declares field dependencies on display_name and resource_type. A comment in the source explains the second one: a related field would have been the obvious approach, but related fields are only supported for x2many, so the dependency is declared explicitly instead.

What this means for your team

Anywhere you schedule both people and machines, this is the widget that keeps the two visually separate. A planning board where a CNC machine and a technician look identical is a board people misread.

The thing worth deciding deliberately is whether clicking a resource should open it. On a scheduling screen, opening the resource record is usually a distraction from the task at hand, and by default Odoo agrees with that everywhere except the form view. If your users are getting pulled off a planning list into resource records, that is configurable, and the next section says how.

Supported options in Odoo 19

Odoo declares no options for this widget. It reads one anyway. no_open is read in extractProps and controls whether the avatar and name are clickable, and it does not appear in any option list, so Studio and every options helper will tell you this widget has nothing to configure.

OptionTypeWhat it does
no_openboolean<strong>Undocumented: not declared in supportedOptions.</strong> Controls whether the avatar and name open the resource record. Present, its value wins in every view. Absent, only a form view is clickable. Because the source tests for the key's presence rather than its truthiness, setting it to False is not the same as leaving it out.(default: absent, which means clickable in a form view only)

The default is not a fixed value, it is a rule: clickable in a form view, not clickable in any other view. Setting no_open explicitly overrides that rule in both directions, so {'no_open': False} makes a list clickable and {'no_open': True} makes a form not.

Working examples

Standard use, with the default per-view behavior:

<field name="resource_id" widget="many2one_avatar_resource"/>

Make the resource clickable in a list, where it would not be by default:

<field name="resource_id" widget="many2one_avatar_resource"
       options="{'no_open': False}"/>

Stop it opening on a form, where it otherwise would:

<field name="resource_id" widget="many2one_avatar_resource"
       options="{'no_open': True}"/>

An undocumented option with a per-view default

The whole behavior is one expression in extractProps:

canOpen: "no_open" in staticInfo.options
    ? !staticInfo.options.no_open
    : staticInfo.viewType === "form",

Read it carefully, because the two branches behave differently. If no_open is present at all, its value decides, in every view. If it is absent, the view type decides, and only a form view gets a clickable link.

Two things follow. First, this option exists and works despite appearing in no option list, no documentation and no Studio panel. It is readable only from the source. Second, the presence check is "no_open" in options rather than a truthiness test, so writing {'no_open': False} is not the same as omitting it. Omitting it in a list view gives you a non-clickable link; setting it to False in the same list gives you a clickable one.

That distinction catches people who assume False is the default. It is not. Absent is the default, and absent means something different in each view.

Version compatibility

VersionStatusNotes
Odoo 19.0VerifiedVerified against the shipped 19.0 source. Registers a kanban. variant.
Odoo 20.0Partial / changedkanban.many2one_avatar_resource renamed to card.many2one_avatar_resource.

The registration variants changed in Odoo 20; the widget itself did not.

What is changing in Odoo 20

Odoo 20 renames this widget's kanban variant. kanban.many2one_avatar_resource is gone and card.many2one_avatar_resource takes its place.

That is not specific to this widget. Odoo 20 introduces a Card renderer, Kanban records render through it, and every one of the fourteen kanban. prefixed registrations in Odoo 19 became card.. There are zero kanban. field registrations left in Odoo 20.

The base registration, the options behavior and the field dependencies are unchanged, so an ordinary view carries over untouched. Only custom code that registered or referenced the kanban. variant needs editing.

Common problems and fixes

SymptomCause and fix
The resource is not clickable in a list or kanban viewDefault behavior. Without no_open, only a form view is clickable. Add options="{'no_open': False}".
Setting no_open to False changed nothing on a formA form is clickable by default, so False matches the existing behavior. Use True to disable opening on a form.
Every resource shows the same generic iconresource_type is not resolving, so the widget cannot tell a person from a machine. Confirm the field points at resource.resource; the widget declares resource_type as a dependency and needs it to load.
A custom kanban.many2one_avatar_resource registration stopped working after upgrading to Odoo 20All kanban. prefixed field registrations were renamed to card. in Odoo 20. Rename your registration to card.many2one_avatar_resource.

Many2one_avatar_resource widget vs the alternatives

WidgetBest forKey difference
many2one_avatar_resourceA resource field that can hold a person or a machineRenders the two differently, and hides an undocumented no_open option
many2one_avatar_employeeA field that always holds an employeeEmployee-specific, with a hover card, and no machine rendering
many2one_avatar_userA field holding a system userPoints at res.users rather than resource.resource
many2one_avatarAny model with an image fieldGeneric, with no resource type awareness
many2many_avatar_resourceSeveral resources on one recordThe x2many version of this widget

If your field points at employees rather than resources, use many2one_avatar_employee, which is built for that model and shows the employee card on hover. Use this one when the field can hold a machine as well as a person, because it is the only one of the avatar family that renders the two differently.

Frequently asked questions

How do I make an Odoo resource avatar clickable in a list view?+
Set options="{'no_open': False}". Without that option only a form view is clickable, because the widget falls back to checking the view type. The option is real but is not declared in the widget's supported options.
Does many2one_avatar_resource have options?+
Odoo declares none, but the source reads no_open in extractProps. It is undocumented and will not appear in Studio or any options helper, yet it works in both Odoo 19 and Odoo 20.
How does the widget tell a person from a machine?+
It declares resource_type as a field dependency and renders a photo for a human resource and an icon for a material one. A source comment notes a related field could not be used because related fields are only supported for x2many.
What changes for this widget in Odoo 20?+
Its kanban variant is renamed: kanban.many2one_avatar_resource becomes card.many2one_avatar_resource. Odoo 20 has zero kanban. prefixed field registrations left. The base widget is otherwise unchanged.

Planning boards people misread?

Scheduling humans and machines on one board only works when the board makes the difference obvious and clicking does what the user expects. We build planning and field service screens around how your dispatchers actually work.

Talk to an Odoo consultant

How this page was produced

Verified by reading addons/resource_mail/static/src/views/fields/many2one_avatar_resource/many2one_avatar_resource_field.js on the 19.0 branch of a local clone of the official Odoo repository. The no_open expression is quoted verbatim from extractProps, and the field dependencies with their explanatory comment from fieldDependencies. The Odoo 20 rename comes from diffing the registrations against the 20.0 branch, where zero kanban. field registrations remain. Corrections welcome via our contact page.