2013-03-15 60 views
0

我有一個功能域,不會給出任何錯誤,但即使它應該也沒有設置任何值。openerp fields.function不影響值

代碼:

class stock_move_custom(osv.osv): 
_name = 'stock.move' 
_inherit = 'stock.move' 

def _penalty(self, cr, uid, ids, field_name, arg, context=None): 
    if not ids: return {} 
    res = {} 
    for id in ids: 
     res[id] = 20.0 

    for line in self.browse(cr, uid, ids, context=context): 
     if line.picking_id: 
      if line.picking_id.purchase_id: 
       if line.picking_id.purchase_id.penalty_id: 
        res[line.id] = 10.0 
    return res  

    _columns = { 
      'value_forpenalty': fields.float('Value', digits=(16,2)), 
      'actual_penalty': fields.function(_penalty, type='float', digits=(16,2), string='Penalty', store=True, select=True) 
      } 
stock_move_custom() 

注:penalty_id是many2one加入purchase.order自定義子。

Q1。我得到的是一個懲罰0。 20和10都不是。有什麼可能是錯的?如果是因爲IDS空白,我該如何解決這個問題? Q2302。我如何將value_forpenalty傳遞給函數,因爲我最終需要它來計算懲罰?因此,當用戶在表單中輸入value_forpenalty字段的值時(並按下一個計算按鈕,或理想情況下沒有該值),該值應傳遞給該函數進行計算。

謝謝

回答

0

我的代碼按照您接受的方式工作,在您的代碼中沒有問題。

您可以重新啓動服務器並再次檢查。

for line in self.browse(cr, uid, ids, context=context): 
     if line.picking_id and line.picking_id.purchase_id and line.picking_id.purchase_id.penalty_id: 
      res[line.id] = 10.0 

而且通過你的論點value_forpenalty,你可以在你從線的功能得到這個值

res[line.id] = line.value_forpenalty 

希望這對您有所幫助

+0

謝謝...我會嘗試這個。 – 2013-03-18 13:59:02