跳转到主要内容

Django导出简单电子表格

项目描述

Landscape.io Code Quality https://travis-ci.org/LibraryOfCongress/django-tabular-export.png?branch=master Documentation Status

从Django 1.8+导出简单电子表格

文档

本模块包含一些函数,这些函数接受(标题,行)对,并返回包含XLSX或CSV下载和Django管理操作(可以添加到任何ModelAdmin以进行通用导出)的HttpResponses。它提供了两个函数(export_to_csv_responseexport_to_xlsx_response),这些函数接受一个文件名、一个列标题列表和一个Django QuerySet、类似列表的对象或生成器,并返回一个响应。

目标

  • 本项目的目标不是成为一个通用的电子表格操作库。唯一的目标是快速、安全地导出数据。

  • API故意设计得简单,让您完全控制标题或数据的显示和格式。 flatten_queryset 对仅两种类型的数据有特殊处理: None 将转换为空字符串,而 datedatetime 实例将使用 isoformat() 进行序列化。所有其他值都将指定为文本数据类型,以避免在值与当前区域设置中的日期相似时在Excel中损坏数据。

  • Unicode安全性:输入值,包括惰性对象,都使用Django的force_text函数进行转换,并将始终以UTF-8格式输出。

  • 性能:已知代码可以处理多达数十万行的数据集。CSV响应使用StreamingHttpResponse,使用最少的内存,并非常快速。Excel (XLSX)响应不能流式传输,但xlsxwriter是较快的实现之一,并且启用了内存大小优化。

快速入门

安装django-tabular-export

pip install django-tabular-export

然后在项目中使用它

from tabular_export import export_to_csv_response, export_to_xlsx_response, flatten_queryset

def my_view(request):
    return export_to_csv_response('test.csv', ['Column 1'], [['Data 1'], ['Data 2']])


def my_other_view(request):
    headers = ['Title', 'Date Created']
    rows = MyModel.objects.values_list('title', 'date_created')
    return export_to_excel_response('items.xlsx', headers, rows)


def export_using_a_generator(request):
    headers = ['A Number']

    def my_generator():
        for i in range(0, 100000):
            yield (i, )

    return export_to_excel_response('numbers.xlsx', headers, my_generator())

def export_renaming_columns(request):
    qs = MyModel.objects.filter(foo="…").select_related("…")
    headers, data = flatten_queryset(qs, field_names=['title', 'related_model__title_en'],
                                     extra_verbose_names={'related_model__title_en': 'English Title'})
    return export_to_csv_response('custom_export.csv', headers, data)

管理员集成

有两个方便的管理员操作,可以轻松添加“导出到Excel”和“导出到CSV”操作

from tabular_export.admin import export_to_csv_action, export_to_excel_action

class MyModelAdmin(admin.ModelAdmin):
    actions = (export_to_excel_action, export_to_csv_action)

默认列将与您调用ModelAdmin的默认查询集时调用values_list获得的列相同,该查询集由ModelAdmin.get_queryset()返回。如果您想自定义此内容,只需在ModelAdmin上声明一个新的操作,该操作执行所需的所有数据准备即可。

from tabular_export.admin import export_to_excel_action

class MyModelAdmin(admin.ModelAdmin):
    actions = ('export_batch_summary_action', )

    def export_batch_summary_action(self, request, queryset):
        headers = ['Batch Name', 'My Computed Field']
        rows = queryset.annotate("…").values_list('title', 'computed_field_name')
        return export_to_excel_response('batch-summary.xlsx', headers, rows)
    export_batch_summary_action.short_description = 'Export Batch Summary'

调试

TABULAR_RESPONSE_DEBUG = True设置会导致所有视图返回HTML表格

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

django-tabular-export-1.1.0.tar.gz (11.5 kB 查看散列)

上传时间:

构建分发

django_tabular_export-1.1.0-py2.py3-none-any.whl (11.1 kB 查看散列)

上传时间: Python 2 Python 3

支持者