2017-08-26 3 views
0

は、私はフィールドがstock_moveisbnと呼ばれているとし、このフィールドはBooleanタイプのものであり、私は('isbn', '=', 'True'),で、すべてのstock_moveオブジェクトをもたらすドメインフィルタ、と、メソッドを作成することができます、その計算を反映して別のフィールドに、このような:だから具体的なフィルタと計算方法マッピングのシナリオ - 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 

、はるかに、これは素敵なアプローチですが、今、私はこれをしたいと仮定ではなく、中isbn ALL stock_moves用フィールドがチェックされていますが、ちょうどstock_movesの場合は、私は4のように呼んでいます。モデル、すなわち内フィールド:

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") 

これはそれらをもたらす必要がありますが、実際に私はそれらを表示したくない:

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フィールドを呼び出すことができますまたは私の見解で何か、それらを読んでください isbn = Trueとそれらの上に合計product_uom_qtyを探します。

私は自分自身を説明してくれることを願っています。

どのようにこれを達成することができますか?たぶん

+1

短い文章で正確に何が必要なのか説明できますか – Cherif

+0

こんにちは、私はフォーム/ビューでmanyyoneフィールドを持ってきたstock_movesのすべてのproduct_uom_qtyフィールドを要約し、 1つがあれば、その結果を表示し、4をすべて選択すると、4つのstock_move内の4つのproduct_uom_qtyを合計します。 – NeoVe

+1

したがって、ユーザが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 

なぜ、4つのmany2oneを使用すると多くの多くのユーザーが複数の在庫を移動することができます使用してthind。

+0

Mmmmmmm最後のコメントを理解していません – Cherif

+0

どのくらいの人を選択できるかを "制御"する必要があります:/、しかし、おそらく一番良い解決策ではない、一瞬で試してみてください、ありがとうございます – NeoVe

+0

ユーザーが合計を選択したときに4つのmanyoneが再度計算されます。これはあなたが望むものです – Cherif

関連する問題