Use Function fields to compute moves

Using the Function field on stock move as relation field is not very efficient
because of the sub-query it generates.

issue11204
review395421008
This commit is contained in:
Cédric Krier
2022-03-06 18:13:01 +01:00
parent 2e9cee5db8
commit fe70345ab0
+10 -2
View File
@@ -217,7 +217,9 @@ class Purchase(
shipment_returns = fields.Function(fields.Many2Many(
'stock.shipment.in.return', None, None, "Shipment Returns"),
'get_shipment_returns', searcher='search_shipment_returns')
moves = fields.One2Many('stock.move', 'purchase', 'Moves', readonly=True)
moves = fields.Function(
fields.Many2Many('stock.move', None, None, "Moves"),
'get_moves', searcher='search_moves')
quoted_by = employee_field(
"Quoted By",
@@ -602,6 +604,13 @@ class Purchase(
return 'waiting'
return 'none'
def get_moves(self, name):
return [m.id for l in self.lines for m in l.moves]
@classmethod
def search_moves(cls, name, clause):
return [('lines.' + clause[0],) + tuple(clause[1:])]
@classmethod
def _get_origin(cls):
"Return list of Model names for origin Reference"
@@ -692,7 +701,6 @@ class Purchase(
default.setdefault('number', None)
default.setdefault('invoice_state', 'none')
default.setdefault('invoices_ignored', None)
default.setdefault('moves', None)
default.setdefault('shipment_state', 'none')
default.setdefault('purchase_date', None)
default.setdefault('quoted_by')