Reviewers: ,
Please review this at http://codereview.tryton.org/289002/
Affected files:
M trytond/model/modelsql.py
M trytond/model/modelstorage.py
Index: trytond/model/modelsql.py
===================================================================
--- a/trytond/model/modelsql.py
+++ b/trytond/model/modelsql.py
@@ -299,7 +299,8 @@
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 @@
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)
Index: trytond/model/modelstorage.py
===================================================================
--- a/trytond/model/modelstorage.py
+++ b/trytond/model/modelstorage.py
@@ -78,6 +78,17 @@
if field_name in cache[model_name][model_id]:
del cache[model_name][model_id][field_name]
+ 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.
@@ -91,8 +102,8 @@
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')
self.__clean_xxx2many_cache()
return False
@@ -147,8 +158,8 @@
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')
--
[email protected] mailing list