Openerp - stock.picking.in函数中的AttributeError

时间:2013-04-16 12:28:51

标签: openerp

真的挣扎着这个:

我从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有什么不同?

由于

2 个答案:

答案 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,没有得到,错误即将来临。 对象和表中定义的字段可能存在问题,但不确定。