Reviewers: ,
Please review this at http://codereview.tryton.org/908002/ Affected files: M trytond/model/modelstorage.py
Index: trytond/model/modelstorage.py
===================================================================
--- a/trytond/model/modelstorage.py
+++ b/trytond/model/modelstorage.py
@@ -933,64 +933,65 @@
not field.setter:
continue
# validate domain
- if (field._type in
- ('many2one', 'many2many', 'one2many', 'one2one')
- and field.domain):
- if field._type in ('many2one', 'one2many'):
- Relation = pool.get(field.model_name)
- else:
- Relation = field.get_target()
- if is_pyson(field.domain):
- pyson_domain = PYSONEncoder().encode(field.domain)
- for record in records:
- env = EvalEnvironment(record, cls)
- env.update(Transaction().context)
- env['current_date'] = datetime.datetime.today()
- env['time'] = time
- env['context'] = Transaction().context
- env['active_id'] = record.id
- domain = PYSONDecoder(env).decode(pyson_domain)
+ with Transaction().set_context(active_test=False):
+ if (field._type in
+ ('many2one', 'many2many', 'one2many', 'one2one')
+ and field.domain):
+ if field._type in ('many2one', 'one2many'):
+ Relation = pool.get(field.model_name)
+ else:
+ Relation = field.get_target()
+ if is_pyson(field.domain):
+ pyson_domain = PYSONEncoder().encode(field.domain)
+ for record in records:
+ env = EvalEnvironment(record, cls)
+ env.update(Transaction().context)
+ env['current_date'] = datetime.datetime.today()
+ env['time'] = time
+ env['context'] = Transaction().context
+ env['active_id'] = record.id
+ domain = PYSONDecoder(env).decode(pyson_domain)
+ relation_ids = []
+ if getattr(record, field_name):
+ if field._type in ('many2one', 'one2one'):
+ relation_ids.append(
+ getattr(record, field_name).id)
+ else:
+ relation_ids.extend(
+ [x.id for x in getattr(record,
+ field_name)])
+ if relation_ids and not Relation.search([
+ 'AND',
+ [('id', 'in', relation_ids)],
+ domain,
+ ]):
+ cls.raise_user_error(
+ 'domain_validation_record',
+ error_args=cls._get_error_args(
+ field_name))
+ else:
relation_ids = []
- if getattr(record, field_name):
- if field._type in ('many2one', 'one2one'):
- relation_ids.append(
- getattr(record, field_name).id)
- else:
- relation_ids.extend(
- [x.id for x in getattr(record,
- field_name)])
- if relation_ids and not Relation.search([
- 'AND',
- [('id', 'in', relation_ids)],
- domain,
- ]):
- cls.raise_user_error(
- 'domain_validation_record',
- error_args=cls._get_error_args(
- field_name))
- else:
- relation_ids = []
- for record in records:
- if getattr(record, field_name):
- if field._type in ('many2one', 'one2one'):
- relation_ids.append(
- getattr(record, field_name).id)
- else:
- relation_ids.extend(
- [x.id for x in getattr(record,
- field_name)])
- if relation_ids:
- finds = Relation.search([
- 'AND',
- [('id', 'in', relation_ids)],
- field.domain,
- ])
- find_ids = map(int, finds)
- if not set(relation_ids) == set(find_ids):
- cls.raise_user_error(
- 'domain_validation_record',
- error_args=cls._get_error_args(
- field_name))
+ for record in records:
+ if getattr(record, field_name):
+ if field._type in ('many2one', 'one2one'):
+ relation_ids.append(
+ getattr(record, field_name).id)
+ else:
+ relation_ids.extend(
+ [x.id for x in getattr(record,
+ field_name)])
+ if relation_ids:
+ finds = Relation.search([
+ 'AND',
+ [('id', 'in', relation_ids)],
+ field.domain,
+ ])
+ find_ids = map(int, finds)
+ if not set(relation_ids) == set(find_ids):
+ cls.raise_user_error(
+ 'domain_validation_record',
+ error_args=cls._get_error_args(
+ field_name))
def required_test(value, field_name):
if (isinstance(value, (type(None), type(False), list,
