changeset e4819056a468 in trytond:default
details: https://hg.tryton.org/trytond?cmd=changeset&node=e4819056a468
description:
Align instance caches of xxx2Many targets
issue10818
review369841002
diffstat:
trytond/model/fields/many2many.py | 18 ++++++++++++------
trytond/model/fields/one2many.py | 12 ++++++++++--
2 files changed, 22 insertions(+), 8 deletions(-)
diffs (81 lines):
diff -r ee6809e365d1 -r e4819056a468 trytond/model/fields/many2many.py
--- a/trytond/model/fields/many2many.py Sun Oct 10 22:08:39 2021 +0200
+++ b/trytond/model/fields/many2many.py Sun Oct 10 22:20:27 2021 +0200
@@ -13,6 +13,7 @@
from trytond.transaction import Transaction
from .field import (Field, size_validate, instanciate_values, domain_validate,
search_order_validate, context_validate, instantiate_context)
+from .function import Function
class Many2Many(Field):
@@ -121,14 +122,19 @@
for i in ids:
res[i] = []
- if self.order is None:
- order = [(self.target, 'ASC')]
- else:
- order = self.order
-
Relation = self.get_relation()
origin_field = Relation._fields[self.origin]
+ if (not isinstance(origin_field, Function)
+ or hasattr(Relation, 'order_' + self.field)):
+ order = [(self.origin, None)]
+ else:
+ order = []
+ if self.order is None:
+ order += [(self.target, None)]
+ else:
+ order += self.order
+
relations = []
for sub_ids in grouped_slice(ids):
if origin_field._type == 'reference':
@@ -140,7 +146,7 @@
if self.filter:
clause.append((self.target, 'where', self.filter))
relations.append(Relation.search(clause, order=order))
- relations = list(chain(*relations))
+ relations = Relation.browse(list(chain(*relations)))
for relation in relations:
origin_id = getattr(relation, self.origin).id
diff -r ee6809e365d1 -r e4819056a468 trytond/model/fields/one2many.py
--- a/trytond/model/fields/one2many.py Sun Oct 10 22:08:39 2021 +0200
+++ b/trytond/model/fields/one2many.py Sun Oct 10 22:20:27 2021 +0200
@@ -12,6 +12,7 @@
from trytond.transaction import Transaction
from .field import (Field, size_validate, instanciate_values, domain_validate,
search_order_validate, context_validate, instantiate_context)
+from .function import Function
class One2Many(Field):
@@ -126,6 +127,13 @@
for i in ids:
res[i] = []
+ if (not isinstance(field, Function)
+ or hasattr(Target, 'order_' + self.field)):
+ order = [(self.field, None)]
+ else:
+ order = []
+ if self.order:
+ order += self.order
targets = []
for sub_ids in grouped_slice(ids):
if field._type == 'reference':
@@ -135,8 +143,8 @@
clause = [(self.field, 'in', list(sub_ids))]
if self.filter:
clause.append(self.filter)
- targets.append(Target.search(clause, order=self.order))
- targets = list(chain(*targets))
+ targets.append(Target.search(clause, order=order))
+ targets = Target.browse(list(chain(*targets)))
for target in targets:
origin_id = getattr(target, self.field).id