diff --git a/tryton/gui/window/view_form/model/field.py b/tryton/gui/window/view_form/model/field.py index 2d35447086..2eae00e513 100644 --- a/tryton/gui/window/view_form/model/field.py +++ b/tryton/gui/window/view_form/model/field.py @@ -106,6 +106,8 @@ class CharField(object): eval(state_changes[key], values) elif key in self.attrs: self.get_state_attrs(model)[key] = self.attrs[key] + if model.mgroup.readonly: + self.get_state_attrs(model)['readonly'] = True if 'value' in state_changes: value = eval(state_changes['value'], values) if value: diff --git a/tryton/gui/window/view_form/model/group.py b/tryton/gui/window/view_form/model/group.py index 544d93e2d3..6e2cdaaa25 100644 --- a/tryton/gui/window/view_form/model/group.py +++ b/tryton/gui/window/view_form/model/group.py @@ -68,7 +68,8 @@ class ModelList(list): class ModelRecordGroup(SignalEvent): - def __init__(self, resource, fields, window, ids=None, parent=None, context=None): + def __init__(self, resource, fields, window, ids=None, parent=None, context=None, + readonly=False): super(ModelRecordGroup, self).__init__() self.window = window self.parent = parent @@ -84,6 +85,7 @@ class ModelRecordGroup(SignalEvent): self.load(ids) self.model_removed = [] self.on_write = '' + self.readonly = readonly @staticmethod def mfields_load(fkeys, models): diff --git a/tryton/gui/window/view_form/screen/screen.py b/tryton/gui/window/view_form/screen/screen.py index 74b15773e2..3c3d57e0e5 100644 --- a/tryton/gui/window/view_form/screen/screen.py +++ b/tryton/gui/window/view_form/screen/screen.py @@ -60,7 +60,8 @@ class Screen(SignalEvent): self.parent = parent self.window = window models = ModelRecordGroup(model_name, self.fields, self.window, - parent=self.parent, context=self.context) + parent=self.parent, context=self.context, + readonly=readonly) self.models_set(models) self.current_model = None self.screen_container = ScreenContainer() @@ -69,7 +70,6 @@ class Screen(SignalEvent): self.__current_view = 0 self.tree_saves = tree_saves self.limit = limit - self.readonly = readonly self.form = form self.fields_view_tree = None self.exclude_field = exclude_field @@ -274,8 +274,6 @@ class Screen(SignalEvent): attrs = node_attributes(node) if attrs.get('widget', False): attrs['type'] = attrs['widget'] - if self.readonly: - attrs['readonly'] = 1 try: fields[str(attrs['name'])].update(attrs) except: