附加所有stock.move ID以从所有相关记录链中列出

时间:2019-11-07 13:26:48

标签: odoo odoo-12

我在datetime.datetime(self.birth_day.get()) 表中有与stock.moveOne2many关系的记录,列stock.move.reconcilemove_to_id表中另一条记录的ID。因此,此链条可以包含数千条记录。

正如您在我的示例中看到的那样,我遍历所有记录并逐层下降,但是正如我之前所说的那样,可能会有成千上万的链接记录,所以我的方法在这里行不通。

我确实知道可能需要在此处使用stock.move之类的while循环,然后我应该遍历记录并继续将ID添加到列表中,但是我无法弄清楚知道怎么做。

  • while there is move_to_ids记录,该记录与move1(stock.move ID = 10)有2个内部记录:One2manymove_to_ids

  • stock.move.reconcile中的每个都有move_to_ids

  • 每个move_to_id(many2one, 'stock.move' ID = 11)记录都再次具有任意数量的move_to_id(stock.move, ID=11) stock.move.reconcile move_to_ids ( move_to_ids ) and each of this move_to_id('stock.move',ID = 12)`等。

所以基本上我想添加所有records have ID 10、11、12等以列出所有相关的move_to_id

move_to_ids,依此类推,直到有0 moves_to_recalculate = [10,11,12]才能从中获得move_to_ids

move_to_id
class StockMove(models.Model):
_name = 'stock.move'

move_to_ids = fields.One2many(
    'stock.move.reconcile', 'move_from_id', string='Move to')

 move_from_ids = fields.One2many(
    'stock.move.reconcile', 'move_to_id', string='Move From'
)

1 个答案:

答案 0 :(得分:0)

我从其他资源获得了答案,但是我认为我需要在这里发布它,因为答案非常好。

def recalculate_fifo(self):

    moves = self.browse(self._context.get('active_ids'))
    moves_to_recalculate = moves
    current_moves = moves
    while current_moves:
        current_moves = current_moves.mapped('move_to_ids.move_to_id')
        current_moves -= moves_to_recalculate
        moves_to_recalculate |= current_moves