0

真的在努力解决这个问题:

我继承了 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 有什么不同?

谢谢

4

2 回答 2

0

我没有花太多时间在上面,但我知道该行与 stock.picking.in 对象一起出现,您定义的字段存储在 stock_picking 表中,这就是为什么它可能会使用 stock.picking 搜索该字段.in,没有得到和错误来了。对象和表中定义的字段可能存在问题,但不确定。

于 2013-04-16T16:35:20.817 回答
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()
于 2013-04-16T16:32:41.513 回答