需求,在django admin后台中添加导出excel表格功能
需求人群:财务,董事
# 1导出excel
# 2设定导出的字段
# 3设定导出的表头字段显示中文
# 4设定导出的字段顺序
# 5权限:超级管理员与用于全国订单查看权限的人
# 6能够筛选字段,然后导出
ip install django-import-export
该插件允许导出文件的格式为:xls,xlsx,csv,tsv,ods,json,yaml,html
执行该命令将会安装以下插件
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]]
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文件
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)