成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

odoo打包下載

JohnLui / 2058人閱讀

摘要:視圖中下載按鈕的編輯附件打包下載中獲取需要下載的文件的,并返回字符串集合打包下載的方法中的打包下載引用和方法,如下代碼

view 視圖中下載按鈕的編輯
    
        附件打包下載
        
        
        code
        
            if records:
                action = {
                    "name": "Visit Webpage",
                    "type": "ir.actions.act_url",
                    "url": "/document/zip/"+str(records.download_zip()),
                    "target": "self",
                }
        
    
model 中獲取需要下載的文件的ID,并返回字符串集合 打包下載的方法
@api.multi
def download_zip(self):
    dones = self.env["ir.attachment"].search([("res_model", "=", "activity.event"), ("res_id", "=", self.id)])
    file_ids = ""
    for x in dones:
        file_ids = file_ids + str(x.id) + ","
    print(file_ids)
    return {
        file_ids
    }
controller.py中的打包下載引用和方法,如下代碼
# -*- coding: utf-8 -*-
import base64
import io
import jinja2
import json
import logging
import os
import sys
import zipfile
import time

import werkzeug
import werkzeug.exceptions
import werkzeug.utils
import werkzeug.wrappers
import werkzeug.wsgi
from odoo import http
from odoo.http import content_disposition, dispatch_rpc, request, 
    serialize_exception as _serialize_exception, Response
from odoo.exceptions import AccessError, UserError, AccessDenied
from odoo.models import check_method_name
from odoo.service import db, security

_logger = logging.getLogger(__name__)

if hasattr(sys, "frozen"):
    # When running on compiled windows binary, we don"t have access to package loader.
    path = os.path.realpath(os.path.join(os.path.dirname(__file__), "..", "views"))
    loader = jinja2.FileSystemLoader(path)
else:
    loader = jinja2.PackageLoader("odoo.addons.web", "views")

env = jinja2.Environment(loader=loader, autoescape=True)
env.filters["json"] = json.dumps

# 1 week cache for asset bundles as advised by Google Page Speed
BUNDLE_MAXAGE = 60 * 60 * 24 * 7

DBNAME_PATTERN = "^[a-zA-Z0-9][a-zA-Z0-9_.-]+$"

#----------------------------------------------------------
# Odoo Web helpers
#----------------------------------------------------------

db_list = http.db_list

db_monodb = http.db_monodb

class DownloadAll(http.Controller):

    def _get_file_response(self, id, filename=None, field="datas", share_id=None, share_token=None):
        """
        returns the http response to download one file.

        """
        status, headers, content = request.registry["ir.http"].binary_content(
            id=id, field=field, filename=filename, related_id=share_id,
            access_token=share_token, access_mode="documents_share", download=True)

        if status == 304:
            response = werkzeug.wrappers.Response(status=status, headers=headers)
        elif status == 301:
            return werkzeug.utils.redirect(content, code=301)
        elif status != 200:
            response = request.not_found()
        else:
            content_base64 = base64.b64decode(content)
            headers.append(("Content-Length", len(content_base64)))
            response = request.make_response(content_base64, headers)

        return response

    def _make_zip(self, name, attachments):
        """returns zip files for the Document Inspector and the portal.

        :param name: the name to give to the zip file.
        :param attachments: files (ir.attachment) to be zipped.
        :return: a http response to download a zip file.
        """
        stream = io.BytesIO()
        try:
            with zipfile.ZipFile(stream, "w") as doc_zip:
                for attachment in attachments:
                    if attachment.type in ["url", "empty"]:
                        continue
                    filename = attachment.datas_fname
                    doc_zip.writestr(filename, base64.b64decode(attachment["datas"]),
                                     compress_type=zipfile.ZIP_DEFLATED)
        except zipfile.BadZipfile:
            _logger.exception("BadZipfile exception")

        content = stream.getvalue()
        headers = [
            ("Content-Type", "zip"),
            ("X-Content-Type-Options", "nosniff"),
            ("Content-Length", len(content)),
            ("Content-Disposition", content_disposition(name))
        ]
        return request.make_response(content, headers)

    @http.route(["/document/zip/"], type="http", auth="public")
    def _get_zip(self, file_ids=None, *args, **kwargs):
        """route to get the zip file of the selection in the document"s Kanban view (Document inspector).
        :param file_ids: if of the files to zip.
        :param zip_name: name of the zip file.
        """
        file_ids = file_ids[2:-3]
        print(file_ids)
        timestamp = time.strftime("%Y%m%d%H%M%S",time.localtime(time.time()))
        zip_name = "activity-" + timestamp + ".zip"
        ids_list = [int(x) for x in file_ids.split(",")]
        print(ids_list)
        env = request.env
        return self._make_zip(zip_name, env["ir.attachment"].browse(ids_list))

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/43329.html

相關(guān)文章

  • Odoo 中添加自定義頁面

    摘要:一般情況下都是在中繼承后在其末尾添加相關(guān)資源路徑除了資源需要引入外,我們編寫的頁面模板也許要引入,打開并在底部添加我們的自定義頁面文件大功告成,一個最簡單的自定義頁面已經(jīng)完成了,安裝模塊然后運(yùn)行看看效果吧。 前些天群里的小伙伴問了些關(guān)于在 Odoo 管理后臺自定義頁面和 Widget 的問題,那我就來寫一篇簡短的內(nèi)容,教大家如何創(chuàng)建自定義頁面并引用第三方庫。如果大家有看我之前寫的基礎(chǔ)教...

    Jackwoo 評論0 收藏0
  • Odoo 基礎(chǔ)教程系列」第一篇——環(huán)境準(zhǔn)備

    摘要:安裝好后,在中執(zhí)行查看版本信息,應(yīng)該會看到輸出如下信息版本號可能會不同如果提示未找到,則需要手動將用戶基礎(chǔ)目錄下的添加到中。相關(guān)文章基礎(chǔ)教程系列第篇開天坑啦 showImg(https://segmentfault.com/img/bV4GZu?w=1262&h=911); 之前說好的 「Odoo 基礎(chǔ)教程系列」終于來了(撒花)~剛過完年重新投入到工作中,一下子事情有點(diǎn)多都要忙不過來了...

    szysky 評論0 收藏0
  • Odoo 中生成唯一不重復(fù)的序列號

    摘要:最近在做的項目中有一個需求是要讓某個字段值根據(jù)記錄產(chǎn)生的日期和一定的組合規(guī)則按順序生成一個序列號,這個序列號不可重復(fù),這原本是一個很常見的需求,沒有多想就寫好了。 showImg(https://segmentfault.com/img/remote/1460000013229918?w=1000&h=667); 最近在做的項目中有一個需求是要讓某個字段值根據(jù)記錄產(chǎn)生的日期和一定的組合...

    wujl596 評論0 收藏0
  • Odoo 基礎(chǔ)教程系列」第二篇——從 Todo 應(yīng)用開始(1)

    摘要:雖然這是個很簡單的應(yīng)用,但是希望大家可以動手一起操作,從最簡單的開始上手學(xué)習(xí)如何使用這個框架。則是在和之間,負(fù)責(zé)響應(yīng)用戶操作,從中獲取數(shù)據(jù)進(jìn)行處理并返回到中。 showImg(https://segmentfault.com/img/bV66tE?w=728&h=410); 在第一篇教程發(fā)布之后差不多一個月的今天,終于完成了第二篇內(nèi)容,這個發(fā)布周期拖得實(shí)在是有點(diǎn)太長了,我都覺得不好意思...

    UCloud 評論0 收藏0
  • 搶灘中小企業(yè)云市場卡位戰(zhàn),SAP 、Odoo等國外巨頭誰能勝出

    摘要:年月日,在中國新年前夕,發(fā)布了中國加速計劃,計劃在未來五年,持續(xù)加大對中國中小企業(yè)市場的投入。一向以高端市場為傲的成為中國中小企業(yè)市場的闖局者。2019年1月31日,在中國新年前夕,SAP發(fā)布了中國加速計劃,計劃在未來五年,持續(xù)加大對中國中小企業(yè)市場的投入。一向以高端市場為傲的SAP成為中國中小企業(yè)市場的闖局者。無獨(dú)有偶。Oracle此前的定位主要是企業(yè)級高端市場,但云計算給Oracle進(jìn)入...

    MorePainMoreGain 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<