控制器ODOO,用于使用JSON创建销售订单



Hello这个控制器能工作。

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_exceptionn    return super(JsonRequest, self)._handle_exception(exception)n  File "C:\Program Files (x86)\Odoo 11.0\server\odoo\http.py", line 312, in _handle_exceptionn    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 reraisen    raise valuen  File "C:\Program Files (x86)\Odoo 11.0\server\odoo\http.py", line 695, in dispatchn    result = self._call_function(**self.params)n  File "C:\Program Files (x86)\Odoo 11.0\server\odoo\http.py", line 344, in _call_functionn    return checked_call(self.db, *args, **kwargs)n  File "C:\Program Files (x86)\Odoo 11.0\server\odoo\service\model.py", line 97, in wrappern    return f(dbname, *args, **kwargs)n  File "C:\Program Files (x86)\Odoo 11.0\server\odoo\http.py", line 337, in checked_calln    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_wrapn    response = f(*args, **kw)n  File "c:\users\gustavo\desktop\custom_addons\jsontest\controllers\controllers.py", line 10, in recive_jsonn    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 createn    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 createn    thread = super(MailThread, self).create(values)n  File "C:\Program Files (x86)\Odoo 11.0\server\odoo\models.py", line 3426, in createn    record = self.browse(self._create(old_vals))n  File "C:\Program Files (x86)\Odoo 11.0\server\odoo\models.py", line 3573, in _createn    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 writen    if act[0] == 0:nKeyError: 0n",
"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
}
]
]
}
}

并工作

最新更新