zoukankan      html  css  js  c++  java
  • 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>

     

    心有猛虎,细嗅蔷薇
  • 相关阅读:
    测试数据生成利器
    9.22“月饼杯”递归算法欢乐赛测试报告总结
    lemon评测软件配置使用方法
    1200:分解因数
    大犇博客
    C++ |递归原理与构造技巧
    2018.9.8信息奥赛集训评测报告总结
    1195 判断整除
    计算机图形学初步
    AcWing
  • 原文地址:https://www.cnblogs.com/1314520xh/p/14691880.html
Copyright © 2011-2022 走看看