如何从 JSON 控制器调用 Odoo 数据?
How to call Odoo data from JSON controller?
所以我需要制作一个 Rest 服务,它将调用来自特定模型的数据。
为此,我必须创建一个控制器。
我是 Odoo 的新手,也是 Json 的新手,我找不到任何适合这个的东西。
目前我所需要的只是一个 http 请求。
class RestService(http.Controller):
@http.route('/orders/<model("sale.order"):order>', auth='none', website=True)
def consulta_orden(self , order):
return request.render('consulta_pedidos.order', {'order': order})
return {'order_id': order_id}
我的想法是当我加载数据时,我可以在模板中呈现这些数据。已经使用 Http 请求执行此操作,但我需要使用 Json。
关于如何更好地实施它的任何提示。
如果你想 return Json(对于 REST-API),你只需要在 Response 对象中 return 它。
确保您已从 odoo.http
导入 Response
。
然后你可以 return 像这样的 json 数据:
return Response(json.dumps({'order_id': order_id}), status=200, content_type="application/json")
我通常将此逻辑包装在一个单独的函数(在控制器外部)中,该函数记录更新的 Odoo 对象上的请求和响应,然后 returns Response 对象。
这样它也可以很容易地在错误处理中重用(然后你可以 return Json 格式的自定义错误响应)
编辑:还要确保您没有在请求中包含 Content-Type: application/json
,在这种情况下,Odoo 会认为这是一个 JSON-RPC 请求。
我用非常简单的方法解决了我的问题。
代码:
@http.route(['/orden_detalle', '/orden_detalle/<int:order_id>'], type='json', auth='user')
def orden_detalle(self, order_id=None):
if order_id:
domain = [('id', '=', order_id)]
else:
domain = []
sales_rec = request.env['sale.order'].search(domain)
sales = []
for rec in sales_rec:
vals = {
'id': rec.id,
'name': rec.name,
'partner_id': rec.partner_id.name,
'user_id': rec.user_id.name,
}
sales.append(vals)
data = {'status': 200, 'response': sales, 'message': 'Sale(s) returned'}
return data
我的来源:
所以我需要制作一个 Rest 服务,它将调用来自特定模型的数据。
为此,我必须创建一个控制器。
我是 Odoo 的新手,也是 Json 的新手,我找不到任何适合这个的东西。
目前我所需要的只是一个 http 请求。
class RestService(http.Controller):
@http.route('/orders/<model("sale.order"):order>', auth='none', website=True)
def consulta_orden(self , order):
return request.render('consulta_pedidos.order', {'order': order})
return {'order_id': order_id}
我的想法是当我加载数据时,我可以在模板中呈现这些数据。已经使用 Http 请求执行此操作,但我需要使用 Json。 关于如何更好地实施它的任何提示。
如果你想 return Json(对于 REST-API),你只需要在 Response 对象中 return 它。
确保您已从 odoo.http
导入 Response
。
然后你可以 return 像这样的 json 数据:
return Response(json.dumps({'order_id': order_id}), status=200, content_type="application/json")
我通常将此逻辑包装在一个单独的函数(在控制器外部)中,该函数记录更新的 Odoo 对象上的请求和响应,然后 returns Response 对象。 这样它也可以很容易地在错误处理中重用(然后你可以 return Json 格式的自定义错误响应)
编辑:还要确保您没有在请求中包含 Content-Type: application/json
,在这种情况下,Odoo 会认为这是一个 JSON-RPC 请求。
我用非常简单的方法解决了我的问题。
代码:
@http.route(['/orden_detalle', '/orden_detalle/<int:order_id>'], type='json', auth='user')
def orden_detalle(self, order_id=None):
if order_id:
domain = [('id', '=', order_id)]
else:
domain = []
sales_rec = request.env['sale.order'].search(domain)
sales = []
for rec in sales_rec:
vals = {
'id': rec.id,
'name': rec.name,
'partner_id': rec.partner_id.name,
'user_id': rec.user_id.name,
}
sales.append(vals)
data = {'status': 200, 'response': sales, 'message': 'Sale(s) returned'}
return data
我的来源: