真的很纠结于这件事:
我继承了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有什么不同?
谢谢
发布于 2013-04-16 16:32:41
好的,在股票模块中的传递插件中找到了答案。因此,这是一个与继承顺序等相关的框架限制问题。
在这里分享以防有人在类似的情况下结束。
为了解决这个问题,我在stock.picking和stock.picking.in中重复了相同的字段。然后,我从picking.in类中调用挑选类的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()发布于 2013-04-16 16:35:20
我没有太多的时间花在它上,但我知道stock.picking.in对象和字段(您定义的)都存储在stock_picking表中,这就是为什么它可能会使用stock.picking.in搜索该字段,而不是get和错误的原因。对象和表中定义的字段可能存在问题,但不确定。
https://stackoverflow.com/questions/16037088
复制相似问题