【发布时间】:2020-03-22 20:59:23
【问题描述】:
你好,这个控制器工作正常。
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 应该是什么样子才能创建带有线条的订单?
谢谢!!!
【问题讨论】:
-
仅添加了虚拟参考,“order_line”:[[0, 0, { 'name': self.product_delivery_timesheet3.name, 'product_id': self.product_delivery_timesheet3.id, 'product_uom_qty': 5 , 'product_uom': uom_days.id }]]
-
在创建对象时添加了所有必需的值。尝试这样做。
-
感谢@DipenShah,只需将 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 } ] } } 并且有效
-
很高兴为您提供帮助。
标签: arrays json controller odoo odoo-11