Как обновить значения `route_ids` через Web API в`product.template` в Odoo/OpenERP 8?

После подключения к серверу с помощью xmlrpc и следуя инструкциям здесь, я пытаюсь изменить значение route_ids (Заготовка -> Информация о цепочке поставок -> Маршруты), поэтому не выбран ни один из трех вариантов (Производство, Покупка, Изготовление на заказ).

Сначала я беру текущие значения:

>>> models.execute_kw(db, uid, password,
...     'product.template', 'read',
...     [125], {'fields': ['route_ids']})
{'route_ids': [5, 6, 1], 'id': 125}

Затем я пытаюсь обновить значения:

>>> models.execute_kw(db, uid, password, 'product.template', 'write', 
...     [[125], {'route_ids': []}])    
True

И, наконец, я проверяю, были ли обновлены значения или нет:

>>> models.execute_kw(db, uid, password,
...     'product.template', 'read',
...     [125], {'fields': ['route_ids']})
{'route_ids': [5, 6, 1], 'id': 125}

Есть идеи, почему это не работает? Я получил те же результаты, то есть без изменений, когда я пытался изменить display_name но когда я попытался изменить weight_net все отлично работает Есть идеи?

1 ответ

Решение

Если бы вы посмотрели документацию о методе записи здесь, вы бы поняли, почему он не работает. На самом деле, страница, которую вы дали, прямо ссылается на нее.

Поэтому я думаю, что проблема у вас заключается в том, что вы пытаетесь очистить route_ids, присваивая ему пустой список.

В документации говорится:

One2many и Many2many используют специальный формат "команд" для управления набором записей, хранящихся в / связанных с полем.

Этот формат представляет собой список триплетов, выполняемых последовательно, где каждый триплет является командой для выполнения на множестве записей. Не все команды применяются во всех ситуациях.

Тот, который нас интересует, чтобы удалить записи:

(5, _, _)

удаляет все записи из набора, что эквивалентно явному использованию команды 3 для каждой записи. Не может быть использован на One2many. Не может быть использовано в create().

Поэтому я думаю, что вы должны написать вместо этого:

>>> models.execute_kw(db, uid, password, 'product.template', 
                        'write', [[125], {'route_ids': [[5, 0, 0]]}])    
True

Надеюсь, это помогло.

Другие вопросы по тегам