Skip to content

[20.0][MIG] web_m2x_options: Migration to version 20.0 - #3721

Merged
OCA-git-bot merged 85 commits into
OCA:20.0from
Tecnativa:20.0-mig-web_m2x_options
Oct 20, 2026
Merged

OCA-git-bot merged 85 commits into
OCA:20.0from
Tecnativa:20.0-mig-web_m2x_options

Conversation

@carlos-lopez-tecnativa

Copy link
Copy Markdown
Contributor
  • Rename the m2o_options_props* functions to m2x_options_props* to reuse them in both many2one and many2many fields.
  • Override the extractM2OFieldProps function to extend the coverage to components that inherit from Many2one. Most of them now use buildM2OFieldDescription and extractM2OFieldProps. The Many2OneReferenceField and KanbanMany2One fields now work, so remove them from the roadmap.
  • Fix loadOptionsSource: options now return a structure where the record is available at option.data.record instead of option.value. Colors are no longer working; this change may also be needed in v19.
  • Add some basic tests

TT64893
@Tecnativa @pedrobaeza @CarlosRoca13 @CRogos could you please review this?

Nicolas JEUDY and others added 30 commits October 9, 2026 07:46
- Add static/description/index.html

fix: use include instead of extend in js function inheritance.

fix: not overwriting the existing object references with the result of the include

fix: update name according to new module name.

fix: error when displaying many2many field without options defined.
[ADD] support 'no_open_edit' on many2one
[FIX] typos
…and make the module installable [MIG] adapt form.js to the new API. [FIX] Fix bug mentioned in pull OCA#262. [MIG] Make the module installable.
…th `options={'open': True}` it always open the first element with this fix it will open the right one
* [FIX][web_m2x_options] Fix Qweb templates.

They were trying to replace non-existing elements, and this was being logged to console:

    Can't find "a.oe_m2o_cm_button" when extending template FieldMany2One
    Can't find "span.badge" when extending template FieldMany2ManyTag

* Raise version correctly.

* [FIX] Make many2many_tags tag deletion work again

* Correct replacement of event

Instead of overwriting all events from upstream widget, better just overwrite the one you need and inherit the rest.
* fix unecessary calls

Do check_access_rights and disable_quick_create calls only once per field.
`web_m2x_options` is supposed to render fields in the context of a form or tree view, where domains can safely be applied because there's a main record that includes a context.

However, when installing along with `web_advanced_search_x2x`, they produce an incompatibility when a x2x field's domain is defined and depends on the current record's context, because a search view has no notion of a *current record*.

The fix is simple: try to do as usual, and if it fails, try without the field's domain.

Without this patch, an exception like this would be raised, i.e. when both addons are installed and you are trying to search project tasks by stage:

``` Error: NameError: name 'project_id' is not defined
http://localhost/web/static/lib/py.js/lib/py.js:370# Traceback:# Changes to be committed:
PY_ensurepy@http://localhost/web/static/lib/py.js/lib/py.js:370:19# modified: static/src/js/form.js
py.evaluate@http://localhost/web/static/lib/py.js/lib/py.js:1340:20#
py.evaluate@http://localhost/web/static/lib/py.js/lib/py.js:1397:35
py.evaluate@http://localhost/web/static/lib/py.js/lib/py.js:1409:34
py.eval@http://localhost/web/static/lib/py.js/lib/py.js:1453:16
eval_domains/<@http://localhost/web/static/src/js/framework/pyeval.js:869:39
_.forEach@http://localhost/web/static/lib/underscore/underscore.js:145:9
_.mixin/</_.prototype[name]@http://localhost/web/static/lib/underscore/underscore.js:1484:29
eval_domains@http://localhost/web/static/src/js/framework/pyeval.js:860:5
eval_domains/<@http://localhost/web/static/src/js/framework/pyeval.js:873:39
_.forEach@http://localhost/web/static/lib/underscore/underscore.js:145:9
_.mixin/</_.prototype[name]@http://localhost/web/static/lib/underscore/underscore.js:1484:29
eval_domains@http://localhost/web/static/src/js/framework/pyeval.js:860:5
eval_domains/<@http://localhost/web/static/src/js/framework/pyeval.js:873:39
_.forEach@http://localhost/web/static/lib/underscore/underscore.js:145:9
_.mixin/</_.prototype[name]@http://localhost/web/static/lib/underscore/underscore.js:1484:29
eval_domains@http://localhost/web/static/src/js/framework/pyeval.js:860:5
pyeval@http://localhost/web/static/src/js/framework/pyeval.js:977:16
eval_arg@http://localhost/web/static/src/js/framework/pyeval.js:988:16
ensure_evaluated@http://localhost/web/static/src/js/framework/pyeval.js:1011:21
call@http://localhost/web/static/src/js/framework/data_model.js:56:9
name_search@http://localhost/web/static/src/js/framework/data.js:537:16
get_search_result@http://localhost/web_m2x_options/static/src/js/form.js:130:50
OdooClass.extend/Class.include/</prototype[name]</<@http://localhost/web/static/src/js/framework/class.js:122:35
source@http://localhost/web/static/src/js/views/form_relational_widgets.js:271:17
_search@http://localhost/web/static/lib/jquery.ui/jquery-ui.js:6823:3
$.widget/</proxiedPrototype[prop]</<@http://localhost/web/static/lib/jquery.ui/jquery-ui.js:415:19
search@http://localhost/web/static/lib/jquery.ui/jquery-ui.js:6815:10
$.widget/</proxiedPrototype[prop]</<@http://localhost/web/static/lib/jquery.ui/jquery-ui.js:415:19
$.widget.bridge/$.fn[name]/<@http://localhost/web/static/lib/jquery.ui/jquery-ui.js:508:19
each@http://localhost/web/static/lib/jquery/jquery.js:383:49
each@http://localhost/web/static/lib/jquery/jquery.js:136:24
$.widget.bridge/$.fn[name]@http://localhost/web/static/lib/jquery.ui/jquery-ui.js:494:4
render_editable/<@http://localhost/web/static/src/js/views/form_relational_widgets.js:189:21
dispatch@http://localhost/web/static/lib/jquery/jquery.js:4640:50
add/elemData.handle@http://localhost/web/static/lib/jquery/jquery.js:4309:41
```
web_m2x_options: Fix usage for non-admins

web_m2x_options: Reduce rpc calls

web_m2x_options: Update manifest and readme
Currently translated at 91.7% (11 of 12 strings)

Translation: web-11.0/web-11.0-web_m2x_options
Translate-URL: https://translation.odoo-community.org/projects/web-11-0/web-11-0-web_m2x_options/pt_BR/
The method `_onOpenColorPicker` is defined on `FormFieldMany2ManyTags`, not in `FieldMany2ManyTags`, so it can only be called on its descendants.

Otherwise, clicking on a `many2many_tags` tag when found in a tree view produces an error such as:

    TypeError: self._onOpenColorPicker is not a function

    http://localhost/web_m2x_options/static/src/js/form.js:354
    Rastreo de error:
    _onOpenBadge@http://localhost/web_m2x_options/static/src/js/form.js:354:17
    proxy/<@http://localhost/web/static/src/js/core/mixins.js:279:20
    dispatch@http://localhost/web/static/lib/jquery/jquery.js:4640:50
    add/elemData.handle@http://localhost/web/static/lib/jquery/jquery.js:4309:41

(cherry picked from commit ddbbe81)
Currently translated at 91.7% (11 of 12 strings)

Translation: web-12.0/web-12.0-web_m2x_options
Translate-URL: https://translation.odoo-community.org/projects/web-12-0/web-12-0-web_m2x_options/fr/
Currently translated at 100.0% (12 of 12 strings)

Translation: web-12.0/web-12.0-web_m2x_options
Translate-URL: https://translation.odoo-community.org/projects/web-12-0/web-12-0-web_m2x_options/fr/
Currently translated at 100.0% (12 of 12 strings)

Translation: web-12.0/web-12.0-web_m2x_options
Translate-URL: https://translation.odoo-community.org/projects/web-12-0/web-12-0-web_m2x_options/pt_BR/
Alexgars73 and others added 6 commits October 15, 2026 07:37
Currently translated at 100.0% (2 of 2 strings)

Translation: web-19.0/web-19.0-web_m2x_options
Translate-URL: https://translation.odoo-community.org/projects/web-19-0/web-19-0-web_m2x_options/sl/
Rename the m2o_options_props* functions to m2x_options_props* to reuse them in both many2one and many2many fields.

Override the extractM2OFieldProps function to extend the coverage to components that inherit from Many2one. Most of them now use buildM2OFieldDescription and extractM2OFieldProps. The Many2OneReferenceField and KanbanMany2One fields now work, so remove them from the roadmap.

Fix loadOptionsSource: options now return a structure where the record is available at option.data.record instead of option.value. Colors are no longer working; this change may also be needed in v19.

@CRogos CRogos left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, but not tested every single setting.

There are a lot of changes :) . Did you do everything by your own or as AI involved? In this case "Assisted-by: XYZ" is missing in the commit message.

I think the added tests could also be merged in the migration commit?

Not sure if this warning in the logs of the tests is relevant?

2026-10-15 16:39:02,695 319 WARNING odoo odoo.addons.web_m2x_options.tests.test_js.TestHoot.test_hoot_web_m2x_options: Killing chrome descendants-or-self of 331: 5 remaining
- chrome (zombie)
- chrome (zombie)
- chrome (zombie)
- chrome (zombie)
- chrome (zombie)

Comment thread web_m2x_options/__manifest__.py Resolved
@pedrobaeza

Copy link
Copy Markdown
Member

/ocabot migration web_m2x_options

@OCA-git-bot OCA-git-bot added this to the 20.0 milestone Oct 19, 2026
@OCA-git-bot OCA-git-bot mentioned this pull request Oct 19, 2026
6 of 38 tasks
Since OCA/oca-ci#116, modules marked as auto_install are no longer installed by oca-ci. If a module runs JavaScript tests and html_editor is not installed, a warning is displayed and the CI fails.
More details: OCA/multi-company#1067 (comment)
This dependency should be removed if this commit is merged: odoo/odoo@20771f3

WARNING odoo odoo.addons.base.models.assetsbundle: Error: argument $color of rgba($color, $alpha) must be a color
@carlos-lopez-tecnativa

Copy link
Copy Markdown
Contributor Author

LGTM, but not tested every single setting.

There are a lot of changes :) . Did you do everything by your own or as AI involved? In this case "Assisted-by: XYZ" is missing in the commit message.

In this case, I made the changes myself, not with AI. If you look closely, the relevant change is this one: 44cf5e2

I think the added tests could also be merged in the migration commit?

I left them in a separate commit in case someone wants to backport the tests to another branch, but if you want, I can squash them into the migration commit.

Not sure if this warning in the logs of the tests is relevant?

It's not relevant; checklog-odoo ignores it: https://github.com/OCA/web/blob/20.0/checklog-odoo.cfg#L4

@chienandalu chienandalu left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tested in runbot with several cases. Superb work as always!

@pedrobaeza

Copy link
Copy Markdown
Member

/ocabot merge nobump

@OCA-git-bot

Copy link
Copy Markdown
Contributor

On my way to merge this fine PR!
Prepared branch 20.0-ocabot-merge-pr-3721-by-pedrobaeza-bump-nobump, awaiting test results.

@OCA-git-bot
OCA-git-bot merged commit cf2a0b0 into OCA:20.0 Oct 20, 2026
5 of 7 checks passed
@OCA-git-bot

Copy link
Copy Markdown
Contributor

Congratulations, your PR was merged at f4da0c7. Thanks a lot for contributing to OCA. ❤️

@carlos-lopez-tecnativa
carlos-lopez-tecnativa deleted the 20.0-mig-web_m2x_options branch October 20, 2026 16:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.