Как вставить one2many значения в odoo, используя xml-rpc

В настоящее время я использую odoo 8.0. На самом деле я создаю продукт с использованием XML-RPC API. Вот код для создания продукта из xml-rpc с использованием php.

$url = "http://localhost:8069";
$db = "xmlcreate";
$username = "admin";
$password = "admin";
require_once('ripcord-master/ripcord.php');
$common = ripcord::client("$url/xmlrpc/2/common");
$uid = $common->authenticate($db, $username, $password, array());
$models = ripcord::client("$url/xmlrpc/2/object");

$product = array('name' => 'Sample',
'type' => 'product',
'list_price' => 4.6,
'standard_price' => 3.25
);
$product_id = $models->execute_kw($db, $uid, $password,  'product.template','create',array($product));

Продукт был успешно создан. Затем я вручную создаю имя атрибута Color (attribute_id = 1) и значение green (value_id = 1). Затем я собираюсь обновить вышеупомянутый varaint (Цвет) следующим кодом.

$attributes = array();
$attributes[] = 0;
$attributes[] = 0;
$attributes['attribute_id'] = 1; // attribute is color (color -> 1)
$attributes['values_id'] = array(1); // attribute value is green(green -> 1)

$existing_prodid = 1;
$up_attr_id = $models->execute_kw($db, $uid, $password,'product.template','write',array($existing_prodid, array('attribute_line_ids' => $attributes)));
print_r($up_attr_id);

Там нет ошибки. Он печатает обновленный идентификатор. Но варианты не обновляются в представлении формы продуктов в интерфейсе odoo. «Attribute_line_ids» — это одно из множества полей в объекте product.template. Я думаю, что синтаксис для обновления one2many полей из xml-rpc php неверен. Помогите мне, пожалуйста. Заранее спасибо.

3

Решение

One2many модель всегда держит foreign key или я говорю Many2one из
это ассоциативная модель.

Например:

В ОДОО product.template иметь One2many связь с product.attribute.line используя поле attribute_line_ids ,

А также product.attribute.line иметь Many2one связь с product.template используя поле product_tmpl_id,

Если вы хотите вставить значение в attribute_line_ids , то вам придется создать запись в product.attribute.line,

Пожалуйста, пройдите через этот фрагмент кода:

$existing_prodid = 59;
$existing_attribute_id = 2;
$existing_value_id = 4;
$product_attribute_line = $models->execute($db, $uid, $password,
'product.attribute.line','create',
array('product_tmpl_id' => $existing_prodid;,
'attribute_id'=>$existing_attribute_id,
'value_ids'=>array(array(6,0,array($existing_value_id)))
))

Я чертовски уверен, что это поможет вам в решении вашей проблемы.

2

Другие решения

Ответ Шармы выглядит правильным (хотя я не использую PHP), но немного больше объяснения: при написании 2-ух полей используется тройка, содержащая код «команды». Магия «6» в ответе Шармы использует команду «заменить».

(0,_ ,{' field': value}): This creates a new record and links it to this one
(1, id,{' field': value}): This updates values on an already linked record
(2, id,_): This unlinks and deletes a related record
(3, id,_): This unlinks but does not delete a related record
(4, id,_): This links an already existing record
(5,_,_): This unlinks but does not delete all linked records
(6,_,[ ids]): This replaces the list of linked records with the provided list

The underscore symbol used above represents irrelevant values, usually filled with 0 or False.

Рейс, Даниэль. Odoo Development Essentials Packt Publishing, 2015

PS — страница 65 в моей печатной копии, индекс в издании, которое я имею, далеко.

2

По вопросам рекламы [email protected]