def export_as_excel(self, request, queryset): meta = self.model._meta # 用于定义文件名, 格式为: app名.模型类名 field_names = [field.name for field in meta.fields] # 模型所有字段名 response = HttpResponse(content_type='application/msexcel') # 定义响应内容类型 response['Content-Disposition'] = f'attachment; filename={meta}.xlsx' # 定义响应数据格式 wb = Workbook() # 新建Workbook ws = wb.active # 使用当前活动的Sheet表 ws.append(field_names) # 将模型字段名作为标题写入第一行 for obj in queryset: # 遍历选择的对象列表 for field in field_names: data = [f'{getattr(obj, field)}' for field in field_names] # 将模型属性值的文本格式组成列表 ws.append(data) # 写入模型属性值 wb.save(response) # 将数据存入响应内容 return response export_as_excel.icon = 'el-icon-export' export_as_excel.short_description = '导出Excel' # 该动作在admin中的显示文字
时间: 2024-02-14 16:35:44 浏览: 100
解决运行django程序出错问题 'str'object has no attribute'_meta'
这段代码定义了一个自定义的按钮 `export_as_excel`,用于批量导出数据为 Excel 文件。具体实现如下:
- 获取当前模型的 meta 信息,用于定义文件名;
- 获取模型的所有字段名,作为 Excel 文件的标题;
- 新建 Workbook 对象,并使用当前活动的 Sheet 表;
- 将模型字段名作为标题写入第一行;
- 遍历选择的对象列表,将模型属性值的文本格式组成列表,并写入 Sheet 表;
- 将数据存入响应内容,并返回响应。
- 最后,指定该动作在 admin 中的显示图标和文字。
需要注意的是,该方法中使用了 openpyxl 库来操作 Excel 文件。在使用前需要先安装该库。
阅读全文