使用xlwt导出django admin中查看的数据

使用xlwt导出django admin中查看的数据

使用django的admin界面导出数据,比如指定产品的订单集合,使用xlwt和orm可以轻松做到:

需要的工具:xlwt(用于生成、写入.xls文件)、StringIO


codes

models.py:
#在相应的model下:
def receipts_export(self):
        if self.id:
            return u'<a href="%s">%s</a>' % (
                reverse('receipt_export', args=(self.id, )),
                _("Export Receipts")
            )
        else:
            return u'Not present'
    receipts_export.allow_tags = True
    receipts_export.short_description = _('Export')
urls.py:

url(r'^admin/order/export/(?P<client_id>\d+)/',
    login_required(client_views.OrderExportHandler.as_view()),
    name='order_export'),
views.py:

import xlwt
import StringIO
from core.models import order

class ReceiptExportHandler(View):
    def get(self, client_id):
        try:
            client = Client.objects.get(pk=client_id)
        except Client.DoesNotExist:
            raise Http404
        self.initialize()#创建表格文件
        headers = ['id', '产品名', '金额(元)']
        self.write_row(headers) #此处写入表头
        for o in order.objects.filter().order_by('-purchase_date'):
            self.write_row(self.make_row(o))

        response = self.make_response()
        response['Content-Disposition'] = 'attachment; filename=%s.xls' % (client.name.encode('utf-8'), )
        return response

    def initialize(self):
        self.wb = xlwt.Workbook(encoding='utf-8')
        self.ws = self.wb.add_sheet('订单列表')
        self.row = 0

    def make_row(self, order):
        id = order.id
        name = order.name
        price = order.price

    def write_row(self, content):
        for i in range(0, len(content)):
            self.ws.write(self.row, i, content[i])
        self.row += 1

    def make_response(self):
        s = StringIO.StringIO()
        self.wb.save(s)
        s.seek(0)

        response = HttpResponse(
            s.read(),
            content_type='application/octet-stream',
        )
        return response

tips:
xlwt是xlrd的兄弟,用于写入excel文件
xlwt只能写入.xls,不能写入.xlsx,所以写多了会造成溢出错误,量稍大就并不是很理想

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值