API Odoo v10 против API Odoo v8

Я просто хочу знать, как некоторые функции можно перевести в новый API, или нужно ли их полностью переводить, в зависимости от того, какой 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?

Я просто пытаюсь понять, как это решить, с этого момента, так как я переношу некоторые модули из версии 8 в версию 10.


person NeoVe    schedule 05.03.2017    source источник


Ответы (1)


Как вы сами написали

метод выставляется как не использующий идентификаторы, его набор записей обычно будет пустым.

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. Исключениями являются методы вычисления, onchange и ограничения.

person CZoellner    schedule 06.03.2017