2017-08-26 47 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