2017-08-26 104 views
0

假设我有一个字段称为isbnstock_move,该字段是Boolean类型的,我可以创建一个方法,与域滤波器,这将带来所有stock_move对象,与('isbn', '=', 'True'), ,并反映在另一场指算来,像这样:具体过滤器和计算方法映射方案 - Odoo V8

@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 

所以,到目前为止,这是一个很好的做法,但现在,假设我想这样做,但不是所有的stock_moves其中isbn字段被检查,但只为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在他们身上。

我希望我已经解释了我自己。

关于如何完成这个任何想法?

+1

你能解释一下你在短句中究竟需要什么 – Cherif

+0

嗨,我需要总结一下stock_moves中的所有product_uom_qty字段,这些字段在我的表单/视图中由这些many2one字段带来,并将结果存储在一个字段中,如果有,显示结果,如果我选择所有4,则总结这四个stock_move中的所有四个product_uom_qty。 – NeoVe

+1

因此,用户选择select stock.move,然后计算数量总和 – Cherif

回答

2

也许是这样的:

@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相关领域的理解。

1

我觉得@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用户可以选择多个库存移动。

+0

mmmmmm不理解你的最新评论 – Cherif

+0

我需要“控制”可以选择多少个:/,但也许不是最好的解决方案,一会儿就试一试,谢谢 – NeoVe

+0

所以你有一种观点,再次计算用户选择总数时的四个many2one。这是你想要的 – Cherif