2016-05-15 8 views
0

私はこれに苦労しており、それについてはあまり明確ではありません。別のクラスのフィールドから関数を呼び出す - Odoo v8

のは、私はクラスの機能を持っているとしましょう:

class my_class(osv.Model): 
    _name = 'my_class' 
    _description = 'my description' 

    def func (self, cr, uid, ids, name, arg, context=None): 
      res = dict((id, 0) for id in ids) 
    sur_res_obj = self.pool.get('contratos.user_input') 
    for id in ids: 
     res[id] = sur_res_obj.search(cr, uid, # SUPERUSER_ID, 
      [('contratos_id', '=', id), ('state', '=', 'done')], 
      context=context, count=True) 
    return res 
    columns = { 
     'function': fields.function(_get_func, 
     string="Number of completed Contratos", type="integer"), 
my_class() 

私は別のクラスのオブジェクトからこの非常に同じ関数を呼び出したい:

class another_class(osv.Model): 
    _inherit = 'my_class' 
    _name = 'my_class' 

    columns = { 
     'another_field' : fields.related('function', 'state', type='char', string = "Related field which calls a function from another object"), 
    } 

しかし、これは動作していません、私はこれについて非常に混乱しています、私はどのようにOdoov8の別のオブジェクトから関数を呼び出すことができますか?

私はself.pool.getについて聞いたことがありますが、私はそれを呼び出す方法について本当に分かりません。

アイデア?

ありがとうございます!

答えて

4

あなたはodoo8使用しているので、あなたは新しいAPIを使用する必要があります。ドキュメントから

新しいAPIでは、Environmentという概念が導入されました。その主な 目的は、カーソルの周りにカプセル化、user_idは、 モデル、およびコンテキスト、レコードセットおよびキャッシュあなたが明示的にcruididsを渡す必要はありません意味

def my_func(self): 
    other_object = self.env['another_class'] 
    other_object.create(vals) # just using create as an example 

valsを提供することであり、あなたの方法でcontextもう、あなたはそれが

envがOdooのインスタンスを格納するために使用されている辞書ライクオブジェクトで、下位互換性のためにそこにまだあるにもかかわらずself.pool.get()を使用していませんモデル、およびその他の情報が含まれているため、Odooモデルから他のオブジェクトやそのメソッドにアクセスできます。

+0

ありがとう、私はOpenERP 7 apiに固執しています。私はこれを試しています。私はもっと苦労したら別の質問を開きます、ありがとう! – NeoVe

1
def example(self, cr, uid, ids, context=None): 
    otherClass = self.pool.get('my_class') 
    ... 
    otherClass.func(cr, uid, otherClassIds, name, arg, context) 

More information.

関連する問題