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
}
]
]
}
}
并工作