django后台管理中导出Excel表格与其它表格数据等功能

需求,在django admin后台中添加导出excel表格功能

需求人群:财务,董事

复制代码
# 1导出excel
# 2设定导出的字段
# 3设定导出的表头字段显示中文  
# 4设定导出的字段顺序
# 5权限:超级管理员与用于全国订单查看权限的人
# 6能够筛选字段,然后导出

1 安装django框架中导出Excel表格的插件

c 复制代码
ip install django-import-export  

该插件允许导出文件的格式为:xls,xlsx,csv,tsv,ods,json,yaml,html

执行该命令将会安装以下插件

c 复制代码
defusedxml-0.7.1  
diff-match-patch-20230430  
django-import-export-3.3.6  
et-xmlfile-1.1.0  
markuppy-1.14 odfpy-1.4.1  
openpyxl-3.1.2 pyyaml-6.0.1  
tablib-3.5.0 xlrd-2.0.1 xlwt-1.3.0  

![[Pasted image 20240119043040.png]]

安装插件后,需要添加到应用列表中

c 复制代码
2 在django settings.py 中的INSTALLED_APPS中添加"import_export"这个插件,并且需要在'django.contrib.admin'之前添加

![[Pasted image 20240119043224.png]]

3在订单models.py相同路径中创建resources.py文件

![[Pasted image 20240119043755.png]]

4修改admin.py中的参数与使用插件

![[Pasted image 20240119044610.png]]

5:效果

![[Pasted image 20240119044745.png]]

![[Pasted image 20240119044806.png]]

![[Pasted image 20240119044836.png]]

csv格式

![[Pasted image 20240119044908.png]]

tsv格式

![[Pasted image 20240119061928.png]]

xls格式

![[Pasted image 20240119044923.png]]

html格式

![[Pasted image 20240119061437.png]]

yaml格式

![[Pasted image 20240119061535.png]]

json格式

![[Pasted image 20240119061615.png]]

ods格式

![[Pasted image 20240119061705.png]]

这样还不够,并没有满足需求,我希望是以下图片这样的效果

1:导出的表头为我设定的中文字段

![[Pasted image 20240119060255.png]]

修改resources.py文件

python 复制代码
from import_export import resources  
from .order_models import Order  
  
  
class OrderResource(resources.ModelResource):  
    class Meta:  
        # 模型是哪个  
        model = Order  
        # 要什么字段的数据? 不写则默认全部  
        # fields=()  
        # 当使用了默认全部 fields时,也会有些字段不需要,那么就要使用exclude,表示不需要的字段  
        # exclude=('id',)  
        # 因为导出的外键是数值,并不能显示相关信息,所以需要重新定义字段获取外键中的明显字段  
        fields = ('id',  
                  'userid__user__username',  
                  'trader_userid__user__username',  
                  'team_leader_userid__user__username',  
                  'urban_userid__user__username',  
                  'province_userid__user__username',  
                  'licensing_userid__user__username',  
                  'order_nationally__name',  
                  'order_province__name',  
                  'order_urban__name',  
                  'order_team__name',  
                  'store__name',  
                  'goodsid__name',  
                  'created_at_time',  
                  'updated_at',  
                  'douyinhao',  
                  'douyinname',  
                  'hezuoma',  
                  'shoujihao',  
                  'weixin',  
                  'douyin_have_num',  
                  'pay_method',  
                  'order_price',  
                  'offline_pay_method',  
                  'offline_price',  
                  'begin_show_time',  
                  'no_appointments',  
                  'authorization',  
                  'executestate',  
                  'chargebacks',  
                  'refundsuccessful',  
                  'sale_remark',  
                  'leader_remark',  
                  'licensing_remark',  
                  'trader_remark',  
                  'manage_remark',  
                  'promotion_cost',  
                  )  
        # 设置导出的顺序  
        export_order = ('id',  
                        'userid__user__username',  
                        'trader_userid__user__username',  
                        'team_leader_userid__user__username',  
                        'urban_userid__user__username',  
                        'province_userid__user__username',  
                        'licensing_userid__user__username',  
                        'order_nationally__name',  
                        'order_province__name',  
                        'order_urban__name',  
                        'order_team__name',  
                        'store__name',  
                        'goodsid__name',  
                        'created_at_time',  
                        'updated_at',  
                        'douyinhao',  
                        'douyinname',  
                        'hezuoma',  
                        'shoujihao',  
                        'weixin',  
                        'douyin_have_num',  
                        'pay_method',  
                        'order_price',  
                        'offline_pay_method',  
                        'offline_price',  
                        'begin_show_time',  
                        'no_appointments',  
                        'authorization',  
                        'executestate',  
                        'chargebacks',  
                        'refundsuccessful',  
                        'sale_remark',  
                        'leader_remark',  
                        'licensing_remark',  
                        'trader_remark',  
                        'manage_remark',  
                        'promotion_cost',  
                        )  
  
    def get_export_headers(self):  
        headers = []  
        for field_name in self.get_export_order():  
            headers.append(self.get_export_field_name(field_name))  
        return headers  
  
    def get_export_field_name(self, field_name):  
        column_names = {  
            'id': '订单id号',  
            'userid__user__username': '下单人',  
            'trader_userid__user__username': '投流人',  
            'team_leader_userid__user__username': '小组长',  
            'urban_userid__user__username': '市经理',  
            'province_userid__user__username': '省负责人',  
            'licensing_userid__user__username': '授权人',  
            'order_nationally__name': '国部门',  
            'order_province__name': '省部门',  
            'order_urban__name': '市部门',  
            'order_team__name': '组部门',  
            'store__name': '商店名',  
            'goodsid__name': '商品名',  
            'created_at_time': '创建时间',  
            'updated_at': '更新时间',  
            'douyinhao': '抖音号',  
            'douyinname': '抖音名',  
            'hezuoma': '合作码',  
            'shoujihao': '手机号',  
            'weixin': '微信号',  
            'douyin_have_num': '下单前已有粉丝数量',  
            'pay_method': '线上支付方式',  
            'order_price': '订单金额',  
            'offline_pay_method': '线下支付方式',  
            'offline_price': '线下收款金额',  
            'begin_show_time': '开播时间',  
            'no_appointments': '预约与否',  
            'authorization': '授权状态',  
            'executestate': '投流状态',  
            'chargebacks': '退单',  
            'refundsuccessful': '退单',  
            'sale_remark': '销售备注',  
            'leader_remark': '组长备注',  
            'licensing_remark': '授权人备注',  
            'trader_remark': '投流手备注',  
            'manage_remark': '市经理备注',  
            'promotion_cost': '投流成本',  
            'dingdanyingli': '本单盈利',  
        }  
        return column_names.get(field_name, field_name)
相关推荐
数据库那些事儿23 分钟前
极智编程:基于Qoder+PolarDB Supabase 实现全栈VibeCoding
数据库
该用户已不存在1 小时前
MySQL 与 PostgreSQL,该怎么选?
数据库·mysql·postgresql
GoldenaArcher1 小时前
GraphQL 工程化篇 III:引入 Prisma 与数据库接入
数据库·后端·graphql
川石课堂软件测试1 小时前
自动化测试之 Cucumber 工具
数据库·功能测试·网络协议·测试工具·mysql·单元测试·prometheus
RestCloud2 小时前
StarRocks 数据分析加速:ETL 如何实现实时同步与高效查询
数据库
左师佑图2 小时前
Apache POI SXSSFWorkbook 报错“没有那个文件或目录”问题排查与解决方案
java·apache·excel
野猪亨利6672 小时前
Qt day1
开发语言·数据库·qt
本就一无所有 何惧重新开始3 小时前
Redis技术应用
java·数据库·spring boot·redis·后端·缓存
isaki1373 小时前
qt day1
开发语言·数据库·qt