J'ai donc besoin de créer un service Rest qui appellera les données d'un modèle spécifique.

Pour ce faire, je dois créer un contrôleur.

Je suis novice avec Odoo, également avec Json, et je ne trouve rien qui puisse fonctionner pour cela.

Loin que j'ai est tout ce dont j'ai besoin, mais dans une requête 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}

L'idée est que lorsque les données sont chargées, je peux rendre ces données dans un modèle. Déjà fait cela avec une requête Http, mais j'en ai besoin avec Json. Tout conseil sur la meilleure façon de le mettre en œuvre.

0
southernegro 27 août 2020 à 01:37

2 réponses

Meilleure réponse

J'ai résolu mon problème de manière très simple.

Le code:

@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

Ma source:

  1. https://www.youtube.com/watch?v=wGvuRbCyytk
  2. Une autre de mes questions: Comment obtenir un enregistrement spécifique dans le contrôleur json dans Odoo 12
0
southernegro 28 août 2020 à 15:32

Si vous souhaitez renvoyer Json (pour une API REST), il vous suffit de le renvoyer dans un objet Response.

Assurez-vous que Response est importé de odoo.http. Ensuite, vous pouvez renvoyer les données json comme ceci:

return Response(json.dumps({'order_id': order_id}), status=200, content_type="application/json")

J'emballe généralement cette logique dans une fonction distincte (en dehors du contrôleur) qui enregistre la demande et la réponse sur l'objet Odoo qui est mis à jour, puis renvoie l'objet Response. De cette façon, il peut également être facilement réutilisé dans la gestion des erreurs (où vous pouvez ensuite renvoyer une réponse d'erreur personnalisée au format Json)

EDIT: assurez-vous également de ne pas inclure Content-Type: application/json dans la requête, dans ce cas, Odoo pensera que c'est une requête JSON-RPC.

0
Jeroen Evens 27 août 2020 à 16:27