С моей точки зрения, вы должны изменить способ производства и получить документ именно там, где документ произведен и доступен.
Более простой способ сделать это, я думаю, что это будет использовать кнопку для возврата действия url dict, чтобы перенаправить запрос на контроллер с правильными данными в строке запроса, чтобы иметь возможность генерировать документ как ответ, как вы это делаете. Что-то вроде:
return {
'type': 'ir.actions.act_url',
'url': '/report/docx/content/custom',
'target': 'self',
}
Затем вы можете поместить свой код, который генерирует отчет docx, в контроллер метода, как показано ниже:
from odoo import http, tools, _
from odoo.http import request, Controller
class CustomController(Controller):
@http.route(['/report/docx/content/custom'], type='http', auth="public")
def report_docx(self, **kwargs):
# your code of report generation that use request.make_response
Просто передайте достаточно информации контроллеру, используя строку запроса URL-адреса, такую как идентификатор записи, или любые другие данные, которые могут вам понадобиться в контроллере, но обычно идентификатора записи будет достаточно