changeset ba9156b0e87d in trytond:default
details: https://hg.tryton.org/trytond?cmd=changeset&node=ba9156b0e87d
description:
Do not group PYSON domains of Reference field
Each domain depend on the target so they can not be grouped into a
single OR-ed
domain.
issue11544
review437141003
diffstat:
trytond/model/modelstorage.py | 5 +++-
trytond/tests/test_field_reference.py | 39 +++++++++++++++++++++++++++++++++++
2 files changed, 43 insertions(+), 1 deletions(-)
diffs (79 lines):
diff -r 9907fbf058a6 -r ba9156b0e87d trytond/model/modelstorage.py
--- a/trytond/model/modelstorage.py Tue May 31 23:47:56 2022 +0200
+++ b/trytond/model/modelstorage.py Wed Jun 08 09:19:40 2022 +0200
@@ -1188,10 +1188,12 @@
encoder = PYSONEncoder()
pyson_domain = encoder.encode(field.domain)
pyson_context = encoder.encode(field.context)
+ dict_domain = False
for record in records:
domain = _record_eval_pyson(
record, pyson_domain, encoded=True)
if isinstance(domain, dict):
+ dict_domain = True
relation = get_relation(record)
if relation:
domain = domain.get(relation.__name__, [])
@@ -1207,7 +1209,8 @@
in_max = Transaction().database.IN_MAX
count = in_max // 10
for context, ctx_domains in domains.items():
- if len(ctx_domains) > len(records) * 0.5:
+ if (not dict_domain
+ and len(ctx_domains) > len(records) * 0.5):
new_domains = {}
for sub_domains in grouped_slice(
list(ctx_domains.keys()), count):
diff -r 9907fbf058a6 -r ba9156b0e87d trytond/tests/test_field_reference.py
--- a/trytond/tests/test_field_reference.py Tue May 31 23:47:56 2022 +0200
+++ b/trytond/tests/test_field_reference.py Wed Jun 08 09:19:40 2022 +0200
@@ -511,6 +511,25 @@
self.assertEqual(reference.reference, None)
@with_transaction()
+ def test_domain_different_targets(self):
+ "Test reference with domain and different targets"
+ pool = Pool()
+ Reference = pool.get('test.reference_domainvalidation')
+ Target1 = pool.get('test.reference.target')
+ target1 = Target1(name="Test")
+ target1.save()
+ Target2 = pool.get('test.reference_domainvalidation.target')
+ target2 = Target2(value=6)
+ target2.save()
+
+ references = Reference.create([{
+ 'reference': str(target1),
+ }, {
+ 'reference': str(target2),
+ }])
+ self.assertEqual(len(references), 2)
+
+ @with_transaction()
def test_domain_pyson(self):
"Test reference with pyson domain"
pool = Pool()
@@ -524,3 +543,23 @@
'reference': str(target),
}])
self.assertEqual(reference.reference, target)
+
+ @with_transaction()
+ def test_domain_pyson_different_targets(self):
+ "Test reference with pyson domain and different targets"
+ pool = Pool()
+ Reference = pool.get('test.reference_domainvalidation_pyson')
+ Target1 = pool.get('test.reference.target')
+ target1 = Target1(name="Test")
+ target1.save()
+ Target2 = pool.get('test.reference_domainvalidation.target')
+ target2 = Target2(value=42)
+ target2.save()
+
+ references = Reference.create([{
+ 'reference': str(target1),
+ }, {
+ 'value': 1,
+ 'reference': str(target2),
+ }])
+ self.assertEqual(len(references), 2)