2017-03-05 7 views
1

私が知りたいことは、いくつかの関数を新しいAPIにどのように変換できるのか、それを完全に翻訳する必要があるかどうかだけです。例えばOdoo v10 APIとOdoo v8 API

、OdooのV8で

@api.model 

the method is exposed as not using ids, its recordset will generally be empty. Its "old API" signature is cr, uid, *arguments, context: 
@api.model 
def some_method(self, a_value): 
    pass 
# can be called as 
old_style_model.some_method(cr, uid, a_value, context=context) 

、私はこのような機能を持っているとします

def update_info(self, cr, uid, ids, context=None): 
    """ OpenERP osv memory wizard : update_info_partner 
    """ 
    context = context or {} 
    seniat_url_obj = self.env('seniat.url') 
    self.cr.execute('''SELECT id FROM res_partner WHERE vat ilike 'VE%';''') 
    record = self.cr.fetchall() 
    pids = [item[0] for item in record] 
    seniat_url_obj.connect_seniat(cr, uid, pids, context=context, 
            all_rif=True) 
    return{} 

私はこの関数に@api.modelデコレータを追加した場合、私はまた、更新する必要があると思いますそれの属性、すなわち:、右?

この場合、@api.modelデコレータを追加してから、関数属性をselfに変更するだけで十分ですか?

私はいくつかのモジュールをv8からv10に移行しているので、今後これをどのように処理するのかを試しています。

答えて

1

あなたは方法は、IDを使用していないとして公開されて自分で

を書いてきたように、そのレコードセットは、一般的に空になります。

api.modelは、odoo ORMコンテキストの静的メソッドのものです。 Python自体のために、静的メソッドではありません。レコード(Pythonオブジェクトとしてのデータベースレコード)で作業している場合は、api.multiまたはapi.oneを使用してください。 ORM create()など、レコードがまったくない場合は、api.modelを使用してください。

古いメソッドを新しいAPIに "変換する"ことは、このトピックでは非常に簡単だと考えられます。メソッドパラメータにidsまたはidまたは<model>_id(s)が表示される場合は、おそらくapi.multiまたはapi.oneです。あなたが持っていない場合:api.model。例外は、計算、変更、および制約メソッドです。

関連する問題