Django的简单电子表格导出

django-tabular-export的Python项目详细描述


Landscape.io Code Qualityhttps://travis-ci.org/LibraryOfCongress/django-tabular-export.png?branch=masterDocumentation Status

从django 1.8+导出简单的电子表格

文档

此模块包含获取(头、行)对并返回带有xlsx或 csv下载和django管理操作,可以添加到任何modeladmin中进行通用导出。它提供了 两个函数(export_to_csv_responseexport_to_xlsx_response)接受一个文件名, 列标题列表和django QuerySet、类列表对象或生成器,并返回响应。

目标

  • 此项目不是一个通用的电子表格操作库。唯一的目标是 快速安全地导出数据。
  • 这个api故意很简单,让您可以完全控制头或 数据。flatten_queryset只对两种类型的数据进行特殊处理:None将转换为 空字符串和datedatetime实例将使用isoformat()序列化。全部 其他值将被指定为文本数据类型,以避免在出现这些值时Excel中的数据损坏 类似于当前区域设置中的日期。
  • unicode安全性:使用django的 force_text 函数,并始终以utf-8的形式发出
  • performance:已知代码可以处理多达数十万行的数据集。CSV响应 使用StreamingHttpResponse,使用最少的内存,并快速启动。Excel(XLSX)响应不能为 流式但是xlsxwriter是一种更快的实现 并启用了内存大小优化。

快速启动

安装Django表格导出:

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)

管理集成

有两种方便方式admin actions 这使得添加“导出到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()返回的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表

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java JavaFX TableView更新单元格,不更新对象值   在扫描器中使用分隔符的java   java OkHttp 4.9.2,连接无法重用,导致端口耗尽   eclipse中的c JNI:运行Java代码   java是否在出厂的所有硬件设备中都有/mnt/sdcard/Android/data文件夹(或等效文件夹)?   Java,在eclipse中访问资源文件夹中的图像   java为什么Bluemix dashDB操作抛出SqlSyntaxErrorException,SQLCODE=1667?   JavaHtmlUnitWebClient。getPage不处理javascript   Google API认证的java问题   java如何将JSON数组反序列化为Apache beam PCollection<javaObject>   ServerSocket停止接收命令,java/安卓   来自Java类的安卓 Toast消息   java如何自动重新加载应用程序引擎开发服务器?   java是否可以尝试/捕获一些东西来检查是否抛出了异常?   java如何做到这一点当我按下load game时,它不仅会加载信息,还会将您带到游戏中?   Java选项Xmx代表什么?   Java映射,它在插入时打印值   设置“ulimit c unlimited”后,java无法生成系统核心转储