真的挣扎着这个:
我从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 :(得分:0)
好的,在交付插件中的库存模块中找到了答案。所以这是一个与继承顺序等相关的框架限制问题。
在此处分享以防有人在类似情况下结束。
要解决这个问题,我在stock.picking和stock.picking.in中重复了相同的字段。然后我从pick.in类调用了pick类的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()
答案 1 :(得分:0)
我没有太多时间花在它上面但是我开始知道这行是随着stock.picking.in对象和字段,你定义,存储在stock_picking表中,这就是为什么它可能会搜索该字段stock.picking.in,没有得到,错误即将来临。 对象和表中定义的字段可能存在问题,但不确定。