使此控制器起作用。
class Jsontest(http.Controller):
@http.route('/api/testjson', auth='public', csrf=False, type='json', methods=['POST'])
def recive_json(self, **kw):
result_insert_record = http.request.env['sale.order'].sudo().create({
'name': 'test sale order 4',
'partner_id': 20,
'order_line': [
(0, 0, {
'product_id': 28, #el id en tabla product va al de product_template
'product_uom_qty':2}),
(0, 0, {
'product_id': 27,
'product_uom_qty':2})]
})
return result_insert_record
我需要为每个参数(kw)发送一个json。
我将控制器更改为
class Jsontest(http.Controller):
@http.route('/api/testjson', auth='public', csrf=False, type='json', methods=['POST'])
def recive_json(self, **kw):
result_insert_record = http.request.env['sale.order'].sudo().create(kw)
return result_insert_record
并发送此json并起作用。
JSON:
{ "params": {
"name": "test sale order 6",
"partner_id": 20
}
}
响应:
{
"jsonrpc": "2.0",
"id": null,
"result": "sale.order(36,)"
}
现在,当我想创建带有行的订单时,问题就来了
我已经尝试过这个json序列,但是它给了我以下错误
json
{ "params": {
"name": "test sale order 7",
"partner_id": 20,
"order_line": [
{
"product_id": 28,
"product_uom_qty":22
}
]
}
}
错误
{
"jsonrpc": "2.0",
"id": null,
"error": {
"code": 200,
"message": "Odoo Server Error",
"data": {
"name": "builtins.KeyError",
"debug": "Traceback (most recent call last):\n File \"C:\\Program Files (x86)\\Odoo 11.0\\server\\odoo\\http.py\", line 653, in _handle_exception\n return super(JsonRequest, self)._handle_exception(exception)\n File \"C:\\Program Files (x86)\\Odoo 11.0\\server\\odoo\\http.py\", line 312, in _handle_exception\n raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])\n File \"C:\\Program Files (x86)\\Odoo 11.0\\server\\odoo\\tools\\pycompat.py\", line 87, in reraise\n raise value\n File \"C:\\Program Files (x86)\\Odoo 11.0\\server\\odoo\\http.py\", line 695, in dispatch\n result = self._call_function(**self.params)\n File \"C:\\Program Files (x86)\\Odoo 11.0\\server\\odoo\\http.py\", line 344, in _call_function\n return checked_call(self.db, *args, **kwargs)\n File \"C:\\Program Files (x86)\\Odoo 11.0\\server\\odoo\\service\\model.py\", line 97, in wrapper\n return f(dbname, *args, **kwargs)\n File \"C:\\Program Files (x86)\\Odoo 11.0\\server\\odoo\\http.py\", line 337, in checked_call\n result = self.endpoint(*a, **kw)\n File \"C:\\Program Files (x86)\\Odoo 11.0\\server\\odoo\\http.py\", line 939, in __call__\n return self.method(*args, **kw)\n File \"C:\\Program Files (x86)\\Odoo 11.0\\server\\odoo\\http.py\", line 517, in response_wrap\n response = f(*args, **kw)\n File \"c:\\users\\gustavo\\desktop\\custom_addons\\jsontest\\controllers\\controllers.py\", line 10, in recive_json\n result_insert_record = http.request.env['sale.order'].sudo().create(kw)\n File \"c:\\program files (x86)\\odoo 11.0\\server\\odoo\\addons\\sale\\models\\sale.py\", line 302, in create\n result = super(SaleOrder, self).create(vals)\n File \"c:\\program files (x86)\\odoo 11.0\\server\\odoo\\addons\\mail\\models\\mail_thread.py\", line 237, in create\n thread = super(MailThread, self).create(values)\n File \"C:\\Program Files (x86)\\Odoo 11.0\\server\\odoo\\models.py\", line 3426, in create\n record = self.browse(self._create(old_vals))\n File \"C:\\Program Files (x86)\\Odoo 11.0\\server\\odoo\\models.py\", line 3573, in _create\n field.write(self.with_context(rel_context), vals[name], create=True)\n File \"C:\\Program Files (x86)\\Odoo 11.0\\server\\odoo\\fields.py\", line 2300, in write\n if act[0] == 0:\nKeyError: 0\n",
"message": "0",
"arguments": [
0
],
"exception_type": "internal_error"
}
}
}
有人知道JSON创建带有行的订单的样子吗?
谢谢!
仅感谢将json更改为:
{
"params":
{
"name": "test sale order 24",
"partner_id": 20,
"order_line":
[
[
0,
0,
{
"product_id": 28,
"product_uom_qty": 5
}
],
[
0,
0,
{
"product_id": 27,
"product_uom_qty": 3
}
]
]
}
}
和作品