Как скачать файл xls в Odoo8?
Как подробно описано в теме, мне нужны пояснения о том, как скачать файл xls. На Odoo8 с помощью мастера я создаю файл xls с xlwt и сохраняет его в файловой системе с помощью функции wb.save (filename). Но, после долгих поисков, я не могу найти то, что мне нужно, и я действительно расстроен... Есть ли кто-то, кто помогает мне выбрать правильный путь?
1 ответ
Вот прекрасный пример для загрузки файла XLS.
Шаг 1: Создайте метод внутри вашей обычной модели (Wizard) и верните URL.
@api.multi
def get_file(self):
return {
'type' : 'ir.actions.act_url',
'url': '/web/binary/download_document?model=wizard.product.stock.report&field=datas&id=%s&filename=product_stock.xls'%(self.id),
'target': 'self',
}
(так же, как файл, который вы можете увидеть в /web/controllers/main.py)
Шаг 2: Создайте класс контроллера, перехватите этот URL и выполните процесс загрузки файла Excel.
from openerp import http
from openerp.http import request
from openerp.addons.web.controllers.main import serialize_exception,content_disposition
import base64
class Binary(http.Controller):
@http.route('/web/binary/download_document', type='http', auth="public")
@serialize_exception
def download_document(self,model,field,id,filename=None, **kw):
""" Download link for files stored as binary fields.
:param str model: name of the model to fetch the binary from
:param str field: binary field
:param str id: id of the record from which to fetch the binary
:param str filename: field holding the file's name, if any
:returns: :class:`werkzeug.wrappers.Response`
"""
Model = request.registry[model]
cr, uid, context = request.cr, request.uid, request.context
fields = [field]
res = Model.read(cr, uid, [int(id)], fields, context)[0]
filecontent = base64.b64decode(res.get(field) or '')
if not filecontent:
return request.not_found()
else:
if not filename:
filename = '%s_%s' % (model.replace('.', '_'), id)
return request.make_response(filecontent,
[('Content-Type', 'application/octet-stream'),
('Content-Disposition', content_disposition(filename))])
В приведенном выше методе я получил идентификатор из URL-адреса, а затем применил некоторые вычисления и вернул http-ответ на запрос. Какие бы значения я ни передавал из мастера в метод контроллера, я получу их в методе контроллера, и в этом методе контроллера я выполню необходимую обработку и верну файл напрямую.
Смотрите ниже, я передал модель, поле, идентификатор и имя файла из URL
/web/binary/download_document?model=wizard.product.stock.report&field=datas&id=%s& filename = product_stock.xls
Используя вышеуказанный метод, вы можете создать xls,csv,txt любой файл.
Спасибо,