2013-04-16 68 views
0

的功能真有這樣一個掙扎:的OpenERP - AttributeError的在stock.picking.in

我從stock.picking.in繼承,並增加了一些列。然後我添加了一個函數字段。

在函數字段引用的函數中,如果我沒有使用stock.picking.in對象中的任何屬性,它將起作用。當我使用對象的任何值時,它開始給出'AttributeError:'和一些隨機屬性。它沒有指定任何其他原因或原因。

代碼:

class stock_picking_custom(osv.osv): 
_name = 'stock.picking.in' 
_inherit = 'stock.picking.in' 
_table = "stock_picking" 

def calc_royalty(self, cr, uid, ids, field_name, arg, context=None): 
    if not ids: return {} 
    res = {} 
    for line in self.browse(cr, uid, ids, context=context): 
     res[line.id] = 0 #line.royalty_rate * line.loading_netweight 

    return res 

_columns = { 
      'loading_netweight': fields.float('Net weight at loading', digits=(16,2), help="Net weight at loading (interior weight)"), 
      'royalty_date': fields.date('Royalty Issue date'), 
      'royalty_number' : fields.char('Royalty Number', size=64), 
      'royalty_rate' : fields.float('Royalty Rate (p. ton)', digits=(16,2)), 
      'royalty_amount' : fields.function(calc_royalty, type='float', digits=(16,2), string='Royalty Amount', store=True, select=True) 
      } 
stock_picking_custom() 

我評論了,我想用就行了。當我把這行代碼放回到代碼中時,它會給royalty_date帶來屬性錯誤(例如),甚至在函數中都沒有提及。

請指導。

編輯:我試着與purchase.order完全相同的代碼,它完美的作品。 stock.picking.in有什麼不同?

感謝

回答

0

好了,找到了答案在股票模塊交付插件。所以這是一個與繼承順序有關的框架限制問題等。

在有人在類似情況下結束時共享此處。

爲了解決,我重複了stock.picking和stock.picking.in中的相同字段。然後我從picking.in類中調用picking類的calc函數。

代碼:

class stock_picking_custom(osv.osv): 
_name = 'stock.picking' 
_inherit = 'stock.picking' 

def calc_royalty(self, cr, uid, ids, field_name, arg, context=None): 
    if not ids: return {} 
    res = {} 

    for line in self.browse(cr, uid, ids, context=context): 
     res[line.id] = line.royalty_rate * line.loading_netweight 

    return res 

_columns = { 
      'loading_netweight': fields.float('Net weight at loading', digits=(16,2), help="Net weight at loading (interior weight)"), 
      'royalty_date': fields.date('Royalty Issue date'), 
      'royalty_number' : fields.char('Royalty Number', size=64), 
      'royalty_rate' : fields.float('Royalty Rate (p. ton)', digits=(16,2)), 
      'royalty_amount' : fields.function(calc_royalty, type='float', digits=(16,2), string='Royalty Amount', store=True, select=True) 
      } 

stock_picking_custom() 

class stock_picking_in_custom(osv.osv): 
_name = 'stock.picking.in' 
_inherit = 'stock.picking.in' 
_table = "stock_picking" 

def calc_royalty(self, cr, uid, ids, field_name, arg, context=None): 
    return self.pool.get('stock.picking').calc_royalty(cr,uid,ids,field_name,arg,context=context) 

_columns = { 
      'loading_netweight': fields.float('Net weight at loading', digits=(16,2), help="Net weight at loading (interior weight)"), 
      'royalty_date': fields.date('Royalty Issue date'), 
      'royalty_number' : fields.char('Royalty Number', size=64), 
      'royalty_rate' : fields.float('Royalty Rate (p. ton)', digits=(16,2)), 
      'royalty_amount' : fields.function(calc_royalty, type='float', digits=(16,2), string='Royalty Amount', store=True, select=True) 
      } 
stock_picking_in_custom() 
0

我沒有得到太多的時間在這上面花,但我才知道,線與stock.picking.in對象和領域來了,你定義,存儲在stock_picking表這就是爲什麼它可能會用stock.picking.in搜索該字段,而不是得到和錯誤即將到來。 對象和表中定義的字段可能存在問題,但不確定。

+0

哎呀,你已經發布了答案! –