Как скачать файл 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

http://www.emiprotechnologies.com/technical_notes/odoo-technical-notes-59/post/how-to-download-any-file-on-button-click-244

Используя вышеуказанный метод, вы можете создать xls,csv,txt любой файл.

Спасибо,

Другие вопросы по тегам