具体过滤器和计算方法映射场景-Odoo v8

Specific filter and calculation method mapping scenario - Odoo v8

假设我在 stock_move 上有一个名为 isbn 的字段,这个字段是 Boolean 类型的,我可以创建一个方法,带有域过滤器,它将带来所有 stock_move 个对象,带有 ('isbn', '=', 'True'),,并在另一个字段上反映该计算,如下所示:

@api.multi
@api.depends('stock_move')
def _compute_amount_total(self):
    draft_orders = self.env['stock.move'].search([('isbn', '=', True)])
    product_uom_qty = sum(draft_orders.mapped('product_uom_qty'))
    for record in self:
        record.total_isbn = product_uom_qty

所以,到目前为止,这是一个不错的方法,但是现在,假设我想这样做,但不是针对检查了 isbn 字段的所有 stock_moves,而只是对于 stock_moves 我正在调用模型中的 4 个 Many2one 字段,即:

stock_move1 = fields.Many2one('stock.move', string="My Stock Move 1")
stock_move2 = fields.Many2one('stock.move', string="My Stock Move 2")
stock_move3 = fields.Many2one('stock.move', string="My Stock Move 3")
stock_move4 = fields.Many2one('stock.move', string="My Stock Move 4")

不过我可以这样调用模型上的 isbn 字段:

stock_move1 = fields.Many2one('stock.move', string="My Stock Move 1")
isbn1 = fields.Boolean(string="ISBN 1", related="stock_move1.isbn")
stock_move2 = fields.Many2one('stock.move', string="My Stock Move 2")
isbn2 = fields.Boolean(string="ISBN 2", related="stock_move2.isbn")
stock_move3 = fields.Many2one('stock.move', string="My Stock Move 3")
isbn3 = fields.Boolean(string="ISBN 3", related="stock_move3.isbn")
stock_move4 = fields.Many2one('stock.move', string="My Stock Move 4")
isbn4 = fields.Boolean(string="ISBN 4", related="stock_move4.isbn")

这应该会带来它们,但实际上我不想展示它们或我认为的任何东西,只需阅读那些 4 stock_moves 寻找 isbn = True 并求和 product_uom_qty他们。

希望我已经解释清楚了。

关于如何实现这一点有什么想法吗?

也许是这样的:

@api.multi
@api.depends(
    'stock_move1.isbn', 'stock_move1.product_uom_qty',
    'stock_move2.isbn', 'stock_move2.product_uom_qty',
    'stock_move3.isbn', 'stock_move3.product_uom_qty',
    'stock_move4.isbn', 'stock_move4.product_uom_qty')
def _compute_amount_total(self):
    for record in self:
        moves = (record.stock_move1 +
            record.stock_move2 +
            record.stock_move3 +
            record.stock_move4).filtered('isbn')
        record.total_isbn = sum(moves.mapped('product_uom_qty'))

据我从你的描述中了解到,你并不真正了解 isbn1..4 相关领域。

我认为@naglis jonailis 已经回答了你的问题。你可能会得到一些错误,因为他没有检查值是否为空或者他没有直接连接字段。

                total_quantity = 0
                # check if the field is selected and add the quantity 
                if rec.many2one_field :
                      total_quantity =+ rec.many2one_field.product_uom_qty


                # affect the sum to your computed field
                 rec.compute_sum_field = total_quantity

还有一个原因是为什么使用四个 many2one 使用 many2many 用户可以 select 移动很多股票。