From 1ede807a819b66d7deefe1a23f2cf6c865cd5e93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Wed, 18 Dec 2019 21:40:42 +0100 Subject: [PATCH] Do not prefetch view of xxx2many using multiselection widget The view is not required by the widget and it allows non ModelView relation to be used. issue8894 review288631002 --- trytond/model/modelview.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/trytond/model/modelview.py b/trytond/model/modelview.py index 90fee9e30e..fe2f26c6a6 100644 --- a/trytond/model/modelview.py +++ b/trytond/model/modelview.py @@ -540,10 +540,10 @@ class ModelView(Model): elif hasattr(field, 'get_target'): return field.get_target().__name__ - def get_views(relation, view_ids, mode): + def get_views(relation, widget, view_ids, mode): Relation = pool.get(relation) views = {} - if field._type in ['one2many', 'many2many']: + if widget in {'one2many', 'many2many'}: # Prefetch only the first view to prevent infinite loop if view_ids: for view_id in view_ids: @@ -576,7 +576,8 @@ class ModelView(Model): continue mode = ( element.attrib.pop('mode', None) or 'tree,form').split(',') - views = get_views(relation, view_ids, mode) + widget = element.attrib.get('widget', field._type) + views = get_views(relation, widget, view_ids, mode) element.attrib['mode'] = ','.join(mode) fields_attrs[fname].setdefault('views', {}).update(views)