如何从 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

我的来源:

  1. https://www.youtube.com/watch?v=wGvuRbCyytk
  2. 我的另一个问题: