From 3cb9f0468f2e47cfc80b34a96030605d56e181ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Tue, 5 Feb 2013 19:31:22 +0100 Subject: [PATCH] Always update attributes and store view per id This is needed to allow the client to choose the right view when the same field is displayed multiple times with different views. review656002 --- trytond/model/modelview.py | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/trytond/model/modelview.py b/trytond/model/modelview.py index 7424b38a6e..3c6f830b07 100644 --- a/trytond/model/modelview.py +++ b/trytond/model/modelview.py @@ -2,6 +2,8 @@ #this repository contains the full copyright notices and license terms. from lxml import etree from functools import wraps +import copy + from trytond.model import Model from trytond.tools import safe_eval, ClassProperty from trytond.pyson import PYSONEncoder, CONTEXT @@ -400,7 +402,8 @@ class ModelView(Model): return arch, fields2 @classmethod - def __view_look_dom(cls, element, type, fields_width=None): + def __view_look_dom(cls, element, type, fields_width=None, + fields_attrs=None): pool = Pool() Translation = pool.get('ir.translation') ModelData = pool.get('ir.model.data') @@ -409,13 +412,16 @@ class ModelView(Model): if fields_width is None: fields_width = {} - fields_attrs = {} + if not fields_attrs: + fields_attrs = {} + else: + fields_attrs = copy.deepcopy(fields_attrs) childs = True if element.tag in ('field', 'label', 'separator', 'group'): for attr in ('name', 'icon'): if element.get(attr): - attrs = {} + fields_attrs.setdefault(element.get(attr), {}) try: if element.get(attr) in cls._fields: field = cls._fields[element.get(attr)] @@ -451,7 +457,7 @@ class ModelView(Model): for view_id in view_ids: view = Relation.fields_view_get( view_id=view_id) - views[view['type']] = view + views[str(view_id)] = view break else: for view_type in mode: @@ -462,10 +468,8 @@ class ModelView(Model): element.attrib['mode'] = ','.join(mode) element.attrib['view_ids'] = ','.join( map(str, view_ids)) - attrs = { - 'views': views, - } - fields_attrs[element.get(attr)] = attrs + fields_attrs[element.get(attr)].setdefault('views', {} + ).update(views) if element.get('name') in fields_width: element.set('width', str(fields_width[element.get('name')])) @@ -509,8 +513,8 @@ class ModelView(Model): if childs: for field in element: - fields_attrs.update(cls.__view_look_dom(field, type, - fields_width=fields_width)) + fields_attrs = cls.__view_look_dom(field, type, + fields_width=fields_width, fields_attrs=fields_attrs) return fields_attrs @staticmethod