Django 数据导出csv格式

利用 HttpResponse 创建一个响应对象,使用 csv.writer() 方法写入

models.py

class Order(models.Model):
    """ 订单 """
    oid = models.CharField(verbose_name='订单号', max_length=64)
    title = models.CharField(verbose_name='名称', max_length=32)
    price = models.IntegerField(verbose_name='价格')
    status_choice = (
        (1,'特支付'),
        (2,'已支付'),
    )
    status = models.SmallIntegerField(verbose_name='支付状态', choices=status_choice, default=1)
    # admin_id    ForeignKey 会自动增加 _id
    admin = models.ForeignKey(verbose_name='管理员', to='Admin', on_delete=models.CASCADE)

urls.py

path('order/export_to_csv/', order.download_csv),

views.py

import csv
from django.shortcuts import HttpResponse


def download_csv(request):
    # 创建一个HTTP响应对象
    response = HttpResponse(
        # 类型csv, 不写就是html
        content_type="text/csv",
        # 指定headers, 附件和生成的文件名
        headers={"Content-Disposition": 'attachment; filename="order-list.csv"'},
    )
    # 在 请求标头的 User-Agent 里检查 是否有Windows字符,如果有改变码为utf-8-sig,
    # 否则 Windows系统 显示中文是乱码
    if 'Windows' in request.headers.get('User-Agent'):
        response.charset = 'utf-8-sig'
    # 数据来源,可迭代的对象,需要导出的对象,可条件筛选
    queryset = models.Order.objects.all().order_by('-oid')

    # 构建一个csv 写入器,传入的参数为response
    writer = csv.writer(response)
    # writerow() 逐行写入,列表
    # 写入第一行内容
    writer.writerow(["订单号", "名称", "价格", "状态", '管理员'])

    # 迭代器,对 queryset对象遍历循环,
    # 每一行数据,csv写入器 写入一次
    for obj in queryset:
        # status是choice类型, 使用 get_status_display()
        writer.writerow([obj.oid, obj.title, obj.price, obj.get_status_display(), obj.admin])

    # 直接返回 响应对象
    return response

创建连接导出

<a style="text-decoration: none" href="/order/export_to_csv/">csv导出</a>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值