Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Core: Remove name_get and use display_name instead #122085

Closed

Conversation

ryv-odoo
Copy link
Contributor

@ryv-odoo ryv-odoo commented May 23, 2023

[REM] core: remove name_get API

Rationale

Since v8, the display_name field is present on all models. By default, display_name uses name_get which has pretty much the same purpose (return record name used by the web client). Gradually, many (backend) developers (and the ORM: 6da1c3a) started using display_name (more convenient than record.name_get()[0][1]) but it still had the name_get override. It becomes more complex than necessary and poeple start to misunderstand the two (and sometimes override both, leading to inconstiencies between display_name/name_get).

To simplify the ORM and the API, we decided to keep only one of them, the display_name field:

  • It is much more convenient from a backend point of view (record.name_get()[0][1] vs record.display_name)
  • It is cached during the same transaction (and invalidated if its dependencies change)
  • It can be overridden like any other compute field (override _compute_display_name with any extra dependencies)
  • name_get is replaced by read(['display_name']) (API perceptive), which can actually be more efficient (if display_name's depends are correct, the ORM will only fetch the fields it needs instead of every prefetchable field)

Changes

  • Deprecated name_get for the v17 and based the method on display_name (the opposite of before)
  • Removed all usage of name_get
  • Overrides of name_get are now overrides of _compute_display_name
  • For res.partner, rename the field store display_name into complete_name because display_name context-dependent and it makes no sense to have a compute store that is context-dependent.
  • Previously, it was possible to return multiple names for the same record with name_get, but it was tricky and most of the usage of this name_get didn't take this into account. The only example of this is the name_get of product.product (now use ", ".join(<names>)).

[IMP] core: fetch display_name during name_search

The name_search makes at least 2 SQL requests, one to find the records and one to read fields needed to compute the display_name. With the default _compute_display_name, it only needs to fetch the _rec_name field (if there is one), but the ORM perfetch field mechanism will also fetch every prefetchable field (see _fetch_field).

Then, to avoid running two queries and fetching too many fields, we add the dependency fields (with _determine_fields_to_fetch) to the select clause of the Query returned by _name_search.

[IMP] *: add dependencies to display_name field

The previous commit introduced an optimization to reduce the number of queries and fields fetched when we call name_search. But it works much better when the dependencies of display_name contain field names used in the calculation (on the same record/model).

Then, to improve the performance and the cache coherency, add depends and depends_context depending on the custom _compute_display_name. Add only the first level of dependencies (never traverse relational field) because only these have a positive impact on the previous optimization and the cost is very low (see modified).

https://github.com/odoo/enterprise/pull/42599
https://github.com/odoo/upgrade/pull/4780
odoo/documentation#4639

@robodoo
Copy link
Contributor

robodoo commented May 23, 2023

@C3POdoo C3POdoo added the RD research & development, internal work label May 23, 2023
@ryv-odoo ryv-odoo changed the title WIP Core Core: Remove name_get and use display_name instead May 24, 2023
@ryv-odoo ryv-odoo force-pushed the master-remove-name_get-core-ryv branch 3 times, most recently from 76aa1c4 to 6d6d275 Compare May 30, 2023 12:57
@ryv-odoo ryv-odoo force-pushed the master-remove-name_get-core-ryv branch 7 times, most recently from 1e007e5 to 81503d2 Compare June 7, 2023 08:33
@ryv-odoo ryv-odoo force-pushed the master-remove-name_get-core-ryv branch 6 times, most recently from d8e3abd to bd9109e Compare June 15, 2023 09:28
@ryv-odoo ryv-odoo force-pushed the master-remove-name_get-core-ryv branch 6 times, most recently from 3cc3ef2 to 24a617b Compare June 19, 2023 10:14
@ryv-odoo ryv-odoo marked this pull request as ready for review June 19, 2023 12:16
@C3POdoo C3POdoo requested review from a team June 19, 2023 12:18
hugocarlier pushed a commit to odoo-dev/odoo that referenced this pull request Oct 5, 2023
Impacted modules:
- hr
- hr_skills
- resource

This commits introduces avatar card preview for resource.resource
records in Planning similar to what has been done in mail for res.users
records (see odoo#121943) and in hr for
hr.employee records (see odoo#131622).

The following widgets/components are created to display the popover card
when hovering on the avatar of the resource.resource record:
- widget many2one_avatar_resource (based on many2one_avatar_user)
- widget many2many_avatar_resource (based on many2many_avatar_user)
- component PlanningEmployeeAvatarAvatar (based on Avatar)

The behavior implemented when hovering on a resource.resource record's
avatar is the following:
- If the resource is human, a popover card is displayed. A click on the
avatar still opens the live chat is a user is associated to the record.
- If the resource is material, a popover card is displayed only if it
has at least two roles. A click on the resource icon does not trigger
anything.

The design of the popover card is changed for resource.resource records
by displaying:
- Roles (for human and material resources)
- Skills (for human resources)

A compute needs to be added on display_name for hr.employee.skill model
as the skills of (human) resources need to be displayed as tags. The
dependencies on the compute method are kept on first level dependecies
as suggested by odoo#122085

task-3457031
juliusc2066 added a commit to odoo-dev/odoo that referenced this pull request Oct 25, 2023
This commit removes all usages of the nameGet method of the orm service
following changes introduced by odoo#122085

task-3377209
robodoo pushed a commit that referenced this pull request Oct 25, 2023
This commit removes all usages of the nameGet method of the orm service
following changes introduced by #122085

task-3377209

closes #139727

Signed-off-by: Mathieu Duckerts-Antoine (dam) <dam@odoo.com>
@randall-vx
Copy link
Contributor

@luisg123v @hugho-ad FYI

xmglord added a commit to vauxoo-dev/addons-vauxoo that referenced this pull request Apr 4, 2024
- Adapt the use of name_get as part of [1].
- Change qty_done to quantity and picked = True as part of [2].

[1] odoo/odoo#122085
[2] odoo/odoo#137864
xmglord added a commit to vauxoo-dev/addons-vauxoo that referenced this pull request Apr 4, 2024
- Adapt the use of name_get as part of [1].
- Adapt the tests.

[1] odoo/odoo#122085
xmglord added a commit to vauxoo-dev/addons-vauxoo that referenced this pull request Apr 4, 2024
- Adapt the use of name_get as part of [1].
- Change qty_done to quantity and picked = True as part of [2].

[1] odoo/odoo#122085
[2] odoo/odoo#137864
xmglord added a commit to vauxoo-dev/addons-vauxoo that referenced this pull request Apr 4, 2024
- Adapt the use of name_get as part of [1].
- Adapt the tests.

[1] odoo/odoo#122085
xmglord added a commit to vauxoo-dev/addons-vauxoo that referenced this pull request Apr 4, 2024
- Adapt the use of name_get as part of [1].

[1] odoo/odoo#122085
xmglord added a commit to vauxoo-dev/addons-vauxoo that referenced this pull request Apr 4, 2024
- Adapt the use of name_get as part of [1].

[1] odoo/odoo#122085
xmglord added a commit to vauxoo-dev/addons-vauxoo that referenced this pull request Apr 4, 2024
- Adapt the use of name_get as part of [1].
- Change qty_done to quantity and picked = True as part of [2].

[1] odoo/odoo#122085
[2] odoo/odoo#137864
xmglord added a commit to vauxoo-dev/addons-vauxoo that referenced this pull request Apr 4, 2024
- Adapt the use of name_get as part of [1].

[1] odoo/odoo#122085
luisg123v pushed a commit to Vauxoo/addons-vauxoo that referenced this pull request Apr 4, 2024
- Adapt the use of name_get as part of [1].
- Change qty_done to quantity and picked = True as part of [2].

[1] odoo/odoo#122085
[2] odoo/odoo#137864
xmglord added a commit to vauxoo-dev/addons-vauxoo that referenced this pull request Apr 8, 2024
- Adapt the use of name_get as part of [1].

[1] odoo/odoo#122085
xmglord added a commit to vauxoo-dev/addons-vauxoo that referenced this pull request Apr 22, 2024
- Adapt the use of name_get as part of [1].

[1] odoo/odoo#122085
luisg123v pushed a commit to Vauxoo/addons-vauxoo that referenced this pull request Apr 24, 2024
- Adapt the use of name_get as part of [1].

[1] odoo/odoo#122085
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
16.4 RD research & development, internal work
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet