2016-04-05 9 views
2

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

$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» - это одно2 поля в объекте product.template. Я думаю, что синтаксис неверен для обновления одного2many поля из xml-rpc php. пожалуйста помогите. Заранее спасибо.

ответ

1

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

Например:

В ODOO 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))) 
               )) 

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

1

Ответ Sharma выглядит правильно (хотя я не использую PHP), но немного больше объяснений: для записи полей 2many используется тройка, содержащая «командный» код. Магия «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 в моей копии для печати, индекс в редакции, который у меня есть.