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()

使用したい行をコメントアウトしました。この行をコードに戻した瞬間に、関数で言及されていない (たとえば) 属性エラーが発生します。

ガイドしてください。

編集: purchase.order でまったく同じコードを試してみましたが、完全に機能します。stock.picking.in の違いは何ですか?

ありがとう

4

2 に答える 2

0

私はそれに費やす時間があまりありませんでしたが、行がstock.picking.inオブジェクトに付属しており、定義したフィールドがstock_pickingテーブルに格納されていることがわかりました。そのため、stock.pickingでそのフィールドを検索する可能性があります.in、取得できず、エラーが発生しています。オブジェクトとテーブルで定義されたフィールドに問題がある可能性がありますが、不明です。

于 2013-04-16T16:35:20.817 に答える
0

OK、配信アドオンの在庫モジュールで答えを見つけました。したがって、これは継承順序などに関連するフレームワークの制限の問題です。

誰かが同様の状況に陥った場合に備えて、ここで共有します。

解決するために、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 に答える