2017-03-05 203 views
1

我只想知道,如何将某些函数转换为新的API,或者是否需要完全转换它们,具体取决于我们使用的API调用。Odoo v10 API vs Odoo v8 API

例如,

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

在Odoo V8,假设我有这样的功能:

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装饰这个功能,我想我还需要更新它的属性,即:self, cr, uid, ids, context=None,对吧?

在这种情况下,添加@api.model装饰器,然后将函数属性更改为只有self就足够了?

我只是试图得到如何解决这个问题,从现在开始,因为我将一些模块从v8镜像到v10。

回答

1

正如你自己

写的方法公开不使用IDS,它记录通常是空的。

api.model更多的是静态方法的东西,在odoo ORM上下文中。对于python本身,它不是一个静态方法。如果您使用记录(数据库记录作为python对象),请使用api.multiapi.one。如果根本没有记录,例如ORM create(),请使用api.model

将旧方法“翻译”为新API可被认为非常简单,仅适用于该主题。如果在方法参数中看到idsid<model>_id(s),则可能是api.multiapi.one。如果你没有em:api.model。例外是计算,onchange和约束方法。