def export_excel(request):
carinfo = request.GET.get('carinfo', '')
queryset = Record.objects.filter(is_deleted=False) \
.defer('deleted_time', 'is_deleted', 'updated_time') \
.select_related('car').order_by('-makedate')
if carinfo:
queryset = queryset.filter(
Q(car__carno__iexact=carinfo) | Q(car__owner__contains=carinfo)
)
###以上代码是查询符合条件的对象
wb = Workbook()
sheet = wb.active
col_names = ('车牌号', '车主姓名', '违章原因', '违章时间', '处罚方式', '是否受理')
for index, col in enumerate('ABCDEF'):
sheet[f'{col}1'] = col_names[index]
row = 2
for record in queryset:
sheet[f'A{row}'] = record.car.carno
sheet[f'B{row}'] = record.car.owner
sheet[f'C{row}'] = record.reason
sheet[f'D{row}'] = record.makedate
sheet[f'E{row}'] = record.punish
sheet[f'F{row}'] = '已受理' if record.dealt else '未受理'
row += 1
buffer = BytesIO()
wb.save(buffer)
resp = HttpResponse(buffer.getvalue())
# 设置响应头指定MIME类型(告诉浏览器服务器返回的内容类型)
resp['content-type'] = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
filename = quote('违章记录表.xlsx')
# 设置响应头指定内容处置方式(inline-内联打开;attachment-下载)
# 如果要设置中文文件名,需要将中文处理成百分号编码,否则不能写到响应头
resp['content-disposition'] = f'attachment; filename*=utf-8\'\'{filename}'
return resp
以上代码主体是carsys项目
如果要导出excel 需要在pycharm中下载依赖
pip install openpyxl pillow