栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

django后台将数据导出为Excel表格

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

django后台将数据导出为Excel表格

# request是用户发起的请求 queryset是用户在界面上选择的结果列表里面的数据集合 def export_model_as_csv(modeladmin,request,queryset): # request是用户发起的请求 queryset用户在列表选择的结果列表里的数据集合 response HttpResponse(content_type text/csv ) field_list exportable_fields # 导出的字段 # 指定导出文件的格式 response[ Content-Disposition ] attachment; filename %s-list-%s.csv %( name , datetime.now().strftime( %Y-%m-%d-%H-%M-%S ) #写入表头 writer csv.writer(response) writer.writerow( # 把每一个字段对应的页面显示的中文名 作为我们导出文件里面的表头 [queryset.model._meta.get_field(f).verbose_name.title() for f in field_list] # 把数据的每一行写进去 for obj in queryset: #单行记录 各个字段的值 写入到csv文件 csv_line_values [] for field in field_list: field_object queryset.model._meta.get_field(field) field_value field_object.value_from_object(obj) csv_line_values.append(field_value) writer.writerow(csv_line_values) logging.info( %s exported %s candidate records % (request.user, len(queryset))) return response # 定义这个函数的属性 export_model_as_csv.short_description u 导出为CSV文件 # 导出按钮的权限 如果用户有export的权限 则运行调用allowed_permissions这个方法 则菜单会展示出来 export_model_as_csv.allowed_permissions ( export , )
class CandidateAdmin(admin.ModelAdmin):
 # 定义actions 将函数注册到actions里面
 actions [export_model_as_csv, ]
 pass
用pandas实现导出功能
def export_model_as_csv(modeladmin,request,queryset): # request是用户发起的请求 queryset用户在列表选择的结果列表里的数据集合
 response HttpResponse(content_type text/csv )
 response[ Content-Disposition ] attachment; filename %s-list-%s.csv % (
 name ,
 datetime.now().strftime( %Y-%m-%d-%H-%M-%S )
 data pd.Dataframe(list(queryset.values()))
 id_list list(data[ app_username ].unique())
 name_list []
 for i in id_list:
 name str(data[data[ app_username ] i][ name ].unique()[0])
 name_list.append(name)
 new_data pd.Dataframe(columns pd.MultiIndex.from_product([data[ sign_date ].unique(), [ 早 , 中 , 晚 ]]), index pd.MultiIndex.from_arrays([id_list, name_list],names [ 学号 , 姓名 ]))
 for i in range(len(data)):
 obj data.iloc[i]
 new_data.loc[obj[ app_username ],obj[ name ]][obj[ sign_date ].strftime( %Y-%m-%d )] [JudgeTem(obj[ morning_temperature ]), JudgeTem(obj[ afternoon_temperature ]), JudgeTem(obj[ evening_temperature ])]
 new_data new_data.style.applymap(color, subset new_data.columns)
 output io.BytesIO() # 配置一个BytesIO 这个是为了转二进制流
 new_data.to_excel(output)
 output.seek(0) # 把游标归0
 response.write(output.getvalue()) # 写入数据
 output.close() # 关闭
 return response # 返回

参考
https://www.cnblogs.com/konghepeng/p/14708752.html
https://my.oschina.net/u/4311876/blog/3425145
设置导出的Excel表格风格

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/266808.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号