Skip to main content

django4-tabular-export

Documentation

This module contains functions which take (headers, rows) pairs and return HttpResponses with either XLSX or CSV downloads and Django admin actions which can be added to any ModelAdmin for generic exports. It provides two functions (export_to_csv_response and export_to_xlsx_response) which take a filename, a list of column headers, and a Django QuerySet, list-like object, or generator and return a response.

Goals

  • This project is not intended to be a general-purpose spreadsheet manipulation library. The only goal is to export data quickly and safely.
  • The API is intentionally simple, giving you full control over the display and formatting of headers or your data. flatten_queryset has special handling for only two types of data: None will be converted to an empty string and date or datetime instances will serialized using isoformat(). All other values will be specified as the text data type to avoid data corruption in Excel if the values happen to resemble a date in the current locale.
  • Unicode-safety: input values, including lazy objects, are converted using Django's force_str function and will always be emitted as UTF-8
  • Performance: the code is known to work with data sets up to hundreds of thousands of rows. CSV responses use StreamingHttpResponse, use minimal memory, and start very quickly. Excel (XLSX) responses cannot be streamed but xlsxwriter is one of the faster implementations and its memory-size optimizations are enabled.

Quickstart

Install django4-tabular-export:

pip install django4-tabular-export

Then use it in a project:

from tabular_export.core import export_to_csv_response, export_to_excel_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 Integration

There are two convenience admin actions which make it simple to add "Export to Excel" and "Export to CSV" actions:

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)

The default columns will be the same as you would get calling values_list on your ModelAdmin's default queryset as returned by ModelAdmin.get_queryset(). If you want to customize this, simply declare a new action on your ModelAdmin which does whatever data preparation is necessary:

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'

Debugging

The TABULAR_RESPONSE_DEBUG = True setting will cause all views to return HTML tables

Metadata

Release files for django4-tabular-export 1.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django4-tabular-export 1.0.1
File Size Uploaded
django4_tabular_export-1.0.1.tar.gz 14.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for django4-tabular-export 1.0.1
File Interpreter ABI Platform
django4_tabular_export-1.0.1-py2.py3-none-any.whl Python 3, Python 2 none any Details

Total release size: 25.6 kB

Release files / django4_tabular_export-1.0.1.tar.gz

Download URL django4_tabular_export-1.0.1.tar.gz
Size 14.2 kB
Tags Source
SHA-256 checksum
How to use checksums
5a84dd99dffffad9551fb692915b71f6f39fadf216d4a8331b5166cdffb026c8
BLAKE2b-256 checksum
How to use checksums
178506897b20e7170aeac5559188dca5050fdd4a7d090853046063e4aec1e840
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.0.0 CPython/3.12.3

Release files / django4_tabular_export-1.0.1-py2.py3-none-any.whl

Download URL django4_tabular_export-1.0.1-py2.py3-none-any.whl
Size 11.4 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
b4d9df5d7101806bfc983f5a13a6b35a51fa56754d1f9f1469bad8ae45ce2fd8
BLAKE2b-256 checksum
How to use checksums
920689193b2901a3f2f8c095aca51a3c6ec9d1eae8fbc257c5be35b6a8cc17dc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.0.0 CPython/3.12.3

Release history Release notifications | RSS feed

This release

1.0.1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page