Как сделать контроллер на Odoo для нестандартного значения? - PullRequest
2 голосов
/ 20 октября 2019

Мне нужно сделать собственный контроллер на Odoo для получения информации о конкретной задаче. И я могу также получить результат. Но теперь я столкнулся с проблемой.

Клиенту необходимо получить информацию с помощью определенного поля.

Например, клиенту необходимо получить информацию с помощью номера отслеживания и данных. также должен быть в формате JSON. Если номер для отслеживания 15556456356, URL должен быть www.customurl.com / dataset / 15556456356

1 Ответ

0 голосов
/ 20 октября 2019

Маршрут этого URL должен быть @http.route('/dataset/<string:tracking_number>', type='http or json', auth="user or public"), в основном метод должен быть таким:

import json

from odoo import http
from odoo.http import Response, request

class tracking(http.Controller):
    # if user must be authenticated use auth="user"
    @http.route('/dataset/<string:tracking_number>', type='http', auth="public")
    def tracking(self, tracking_number):  # use the same variable name
        result = # compute the result with the given tracking_number and the result should be a dict to pass it json.dumps
        return Response(json.dumps(result), content_type='application/json;charset=utf-8',status=200)

Этот метод принимает http запрос и возвращает ответ json, если клиентотправляя json запросов, вы должны изменить type='json'. не забудьте импортировать файл в __init___.py.

Давайте рассмотрим пример, скажем, что я хочу вернуть некоторую информацию о sale.order с помощью IDв URL:

import json

from odoo import http
from odoo.http import Response, request

 class Tracking(http.Controller):
    @http.route('/dataset/<int:sale_id>', type='http', auth="public")
    def tracking(self, sale_id):
        # get the information using the SUPER USER
        result = request.env['sale.order'].sudo().browse([sale_id]).read(['name', 'date_order'])
        return Response(json.dumps(result), content_type='application/json;charset=utf-8',status=200)

Поэтому, когда я вхожу в этот URL с помощью моего браузера: http://localhost:8069/dataset/1:

repose of my http request

...