diff --git a/trytond/model/modelsql.py b/trytond/model/modelsql.py index 819a0f989e..45d2325c16 100644 --- a/trytond/model/modelsql.py +++ b/trytond/model/modelsql.py @@ -299,7 +299,8 @@ class ModelSQL(ModelStorage): for inherits in tocreate: inherits_obj = pool.get(inherits) - inherits_id = inherits_obj.create(tocreate[inherits]) + with Transaction().set_user(0, set_context=True): + inherits_id = inherits_obj.create(tocreate[inherits]) values[self._inherits[inherits]] = inherits_id # Insert record @@ -947,7 +948,8 @@ class ModelSQL(ModelStorage): for val in updend: if self._inherit_fields[val][0] == table: values2[val] = values[val] - pool.get(table).write(nids, values2) + with Transaction().set_user(0, set_context=True): + pool.get(table).write(nids, values2) self._validate(ids) diff --git a/trytond/model/modelstorage.py b/trytond/model/modelstorage.py index f9dd86a55f..9cd2a5d956 100644 --- a/trytond/model/modelstorage.py +++ b/trytond/model/modelstorage.py @@ -64,6 +64,17 @@ class ModelStorage(Model): "Default value for create_date field." return datetime.datetime.today() + def __fields_by_model(self, values): + "Return a dictionary with list of fields from values grouped by model" + fields_by_model = {} + for field in values: + if field in self._columns: + model = self._name + else: + model = self._inherit_fields[field][0] + fields_by_model.setdefault(model, []).append(field) + return fields_by_model + def create(self, values): ''' Create records. @@ -77,8 +88,8 @@ class ModelStorage(Model): model_field_access_obj = pool.get('ir.model.field.access') model_access_obj.check(self._name, 'create') - model_field_access_obj.check(self._name, - [x for x in values if x in self._columns], 'write') + for model, fields in self.__fields_by_model(values).iteritems(): + model_field_access_obj.check(model, fields, 'write') return False def trigger_create(self, id): @@ -132,8 +143,8 @@ class ModelStorage(Model): model_field_access_obj = pool.get('ir.model.field.access') model_access_obj.check(self._name, 'write') - model_field_access_obj.check(self._name, - [x for x in values if x in self._columns], 'write') + for model, fields in self.__fields_by_model(values).iteritems(): + model_field_access_obj.check(model, fields, 'write') if not self.check_xml_record(ids, values): self.raise_user_error('write_xml_record', error_description='xml_record_desc')