odoo14里自定义批量下载数据【excel】

1、创建一个向导模型:

from odoo import models, fields, api
import base64
import xlwt
from io import BytesIO

class UserExport(models.TransientModel):
    _name = "user.export"
    _description = "导出成excel"

    file = fields.Binary('文件')

    def generate_excel(self, task_ids):
        workbook = xlwt.Workbook(encoding='utf-8')
        worksheet = workbook.add_sheet('任务清单')

        style = xlwt.XFStyle()  # 初始化样式
        font = xlwt.Font()  # 为样式创建字体
        font.name = '宋体'  # 字体
        font.bold = True  # 加粗
        font.height = 20 * 10  # 字体大小
        style.font = font  # 为样式设置字体

        # 添加列的标题
        header = ['姓名', '性别', '年龄']
        for col in range(len(header)):
            worksheet.write(0, col, header[col], style)
        row = 1
        for line in task_ids:
            worksheet.write(row, 0, line.name if line.name else '')
            worksheet.write(row, 1, line.sex if line.sex else '')
            worksheet.write(row, 2, line.age if line.age else '')
            row = row + 1
            # 保存
         buffer = BytesIO()
         workbook.save(buffer)
         return base64.encodebytes(buffer.getvalue())

    def action_export_data(self):
        # 获取id
        context = dict(self._context or {})
        task_ids = context.get('active_ids')
        # 查出数据
        task_ids = self.env['demo.user'].browse(task_ids)
        # 调用自定义excel模板
        res = self.create({'file': self.generate_excel(task_ids)})
        file_name = 'DEMO_USER'
        excel_url = '/web/content?model=%s&id=%s&field=file&download=true&filename=%s.xls' % (self._name, res.id, file_name)
        value = dict(
            type = 'ir.actions.act_url',
            target = 'self',
            url = excel_url,
        )
        return value

二、新建一个模型

# -*- coding: utf-8 -*-
from odoo import api, fields, models, tools
import os
import base64
import logging

class demo_user(models.Model):
    _name = 'demo.user'
    _description = '用户'

    name = fields.Char('姓名')
    sex = fields.Char('性别')
    age = fields.Integer('年龄')

三、在动作里添加按钮

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="excel_user_export_action" model="ir.actions.server">
        <field name="name">导出Excel</field>
        <field name="model_id" ref="mo_sale.model_user_export"/>
        <field name="binding_model_id" ref="mo_sale.model_demo_user"/>
        <field name="state">code</field>
        <field name="code">
            action = env['user.export'].action_export_data()
        </field>
    </record>
</odoo>

创建action和menu

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <data>
        <record id="demo_uesr_order_action" model="ir.actions.act_window">
        <field name="name">Demo 用户</field>
        <field name="res_model">demo.user</field>
        <field name="view_mode">tree,form</field>
    </record>

    </data>
</odoo>

 

心有猛虎,细嗅蔷薇
原文地址:https://www.cnblogs.com/1314520xh/p/14691880.html