网站设计一年费用,怎么上国外网站,中国建设银行网站登陆,网站建设教程ppt一、导出Excel
1、安装openpyxl库
2、admin文件
# 导入openpyxl库中的Workbook类#xff0c;用于创建Excel文件
from openpyxl import Workbook
# 导入Django的admin模块#xff0c;用于在Django admin后台注册和管理模型
from django.contrib import admin
# 导入…一、导出Excel
1、安装openpyxl库
2、admin文件
# 导入openpyxl库中的Workbook类用于创建Excel文件
from openpyxl import Workbook
# 导入Django的admin模块用于在Django admin后台注册和管理模型
from django.contrib import admin
# 导入HttpResponse类用于生成HTTP响应
from django.http import HttpResponse
# 假设这是从某个应用的models.py文件中导入的PrettyNum模型
from .models import Category # 定义一个名为ExportExcelMixin的混合类Mixin用于添加导出Excel的功能
class ExportExcelMixin(object): # 定义一个方法export_as_excel用于将查询集queryset导出为Excel文件 def export_as_excel(self, request, queryset): # 获取当前模型的元数据对象 meta self.model._meta # 从元数据对象中提取所有字段的名称 field_names [field.name for field in meta.fields] # 创建一个HttpResponse对象设置内容类型为Excel文件 response HttpResponse(content_typeapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet) # 设置响应的Content-Disposition头部指定文件名为模型名加.xlsx后缀 response[Content-Disposition] fattachment; filename{meta.model_name}.xlsx # 创建一个Workbook对象即一个Excel工作簿 wb Workbook() # 激活工作簿中的第一个工作表 ws wb.active # 将字段名称作为第一行写入工作表 ws.append(field_names) # 遍历查询集中的每个对象 for obj in queryset: # 对于每个对象提取其字段值并将它们作为一行数据写入工作表 row_data [getattr(obj, field) for field in field_names] ws.append(row_data) # 将工作簿保存到HttpResponse对象中以便作为文件下载 wb.save(response) # 返回包含Excel文件的HttpResponse对象 return response # 为export_as_excel方法设置简短描述以便在Django admin后台显示 export_as_excel.short_description 导出Excel # 使用admin.register装饰器注册PrettyNum模型到Django admin后台
# 同时通过继承ExportExcelMixin混合类为PrettyNumAdmin类添加导出Excel的功能
admin.register(Category)
class PrettyNumAdmin(admin.ModelAdmin, ExportExcelMixin): # 定义在Django admin后台表单中显示的字段 fields (name, ) # 定义在Django admin后台列表视图中显示的字段 list_display (name, ) # 定义在Django admin后台列表视图中可用的过滤器 list_filter (name, ) # 定义在Django admin后台搜索栏中可搜索的字段 search_fields (name, ) # 将export_as_excel方法添加到actions列表中以便在Django admin后台作为操作选项显示 actions [export_as_excel]ExportExcelMixin类为excel的导出类可直接复制带装饰器的类修改类参数修改字段。
二、导出csv
导出类似与导出excel代码合并如下
from django.contrib import admin
from django.http import HttpResponse
from django.urls import reverse
from urllib.parse import quote
from openpyxl import Workbook
import csv
from .models import Category class ExportExcelMixin: def export_as_excel(self, request, queryset): # 获取当前模型的元数据对象 meta self.model._meta # 从元数据对象中提取所有字段的名称 field_names [field.name for field in meta.fields] # 创建一个HttpResponse对象设置内容类型为Excel文件 response HttpResponse(content_typeapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet) # 设置响应的Content-Disposition头部指定文件名为模型名加.xlsx后缀 response[Content-Disposition] fattachment; filename{meta.model_name}.xlsx # 创建一个Workbook对象即一个Excel工作簿 wb Workbook() # 激活工作簿中的第一个工作表 ws wb.active # 将字段名称作为第一行写入工作表 ws.append(field_names) # 遍历查询集中的每个对象 for obj in queryset: # 对于每个对象提取其字段值并将它们作为一行数据写入工作表 row_data [getattr(obj, field) for field in field_names] ws.append(row_data) # 将工作簿保存到HttpResponse对象中以便作为文件下载 wb.save(response) # 返回包含Excel文件的HttpResponse对象 return response export_as_excel.short_description 导出Excel class ExportCsvMixin: def export_as_csv(self, request, queryset): meta self.model._meta field_names [field.name for field in meta.fields] filename f{meta.verbose_name_plural}.csv filename_quoted quote(filename) response HttpResponse(content_typetext/csv; charsetutf-8) response[Content-Disposition] fattachment; filename{filename_quoted} writer csv.writer(response) writer.writerow(field_names) for obj in queryset: row_data [getattr(obj, field) for field in field_names] writer.writerow(row_data) return response export_as_csv.short_description 导出CSV admin.register(Category)
class CategoryAdmin(admin.ModelAdmin, ExportExcelMixin, ExportCsvMixin): fields (name,) list_display (name,) list_filter (name,) search_fields (name,) actions [export_as_excel, export_as_csv]
写导出excel和导出csv文件的两个类写一个导出字段的类引入以上两个类。