如何使用 xml-rpc 在 odoo 中插入 one2many 值
How to insert one2many values in odoo using xml-rpc
目前我使用的是odoo 8.0。实际上,我正在使用 XML-RPC API 创建产品。这里是使用 php.
从 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(Color)。
$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);
没有错误。它打印更新后的 ID。但是这些变体不会在 odoo 前端的产品表单视图中更新。 'attribute_line_ids' 是 product.template 对象中的 one2many 字段。我认为从 xml-rpc php 更新 one2many 字段的语法不正确。请帮我。提前致谢。
One2many model always hold the foreign key
or i say Many2one
of
it's associative model .
例如:
在 ODOO 中,product.template
使用字段 attribute_line_ids
与 product.attribute.line
有 One2many
关系。
并且 product.attribute.line
使用字段 product_tmpl_id
.
与 product.template
有 Many2one
关系
如果要在 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)))
))
我非常确定它会帮助您解决问题。
Sharma 的回答看起来是正确的(尽管我没有使用 PHP),但需要多解释一下:编写 2many 字段使用包含 "command" 代码的三元组。 Sharma 答案中的神奇“6”是使用 "replace" 命令。
(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 开发要点 Packt 出版社,2015
PS - 我的印刷版第 65 页,索引与我的版本相去甚远。
目前我使用的是odoo 8.0。实际上,我正在使用 XML-RPC API 创建产品。这里是使用 php.
从 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(Color)。
$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);
没有错误。它打印更新后的 ID。但是这些变体不会在 odoo 前端的产品表单视图中更新。 'attribute_line_ids' 是 product.template 对象中的 one2many 字段。我认为从 xml-rpc php 更新 one2many 字段的语法不正确。请帮我。提前致谢。
One2many model always hold the
foreign key
or i sayMany2one
of it's associative model .
例如:
在 ODOO 中,product.template
使用字段 attribute_line_ids
与 product.attribute.line
有 One2many
关系。
并且 product.attribute.line
使用字段 product_tmpl_id
.
product.template
有 Many2one
关系
如果要在 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)))
))
我非常确定它会帮助您解决问题。
Sharma 的回答看起来是正确的(尽管我没有使用 PHP),但需要多解释一下:编写 2many 字段使用包含 "command" 代码的三元组。 Sharma 答案中的神奇“6”是使用 "replace" 命令。
(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 开发要点 Packt 出版社,2015
PS - 我的印刷版第 65 页,索引与我的版本相去甚远。