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

Reply via email to