Simple spreadsheet exports for Django 4+
Project description
django4-tabular-export
[!NOTE]
This version is compatible with Django 4+.
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 anddate
ordatetime
instances will serialized usingisoformat()
. 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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file django4_tabular_export-1.0.1.tar.gz
.
File metadata
- Download URL: django4_tabular_export-1.0.1.tar.gz
- Upload date:
- Size: 14.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.0.0 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5a84dd99dffffad9551fb692915b71f6f39fadf216d4a8331b5166cdffb026c8 |
|
MD5 | a094917d5cfc50a3c8e450cd062405df |
|
BLAKE2b-256 | 178506897b20e7170aeac5559188dca5050fdd4a7d090853046063e4aec1e840 |
File details
Details for the file django4_tabular_export-1.0.1-py2.py3-none-any.whl
.
File metadata
- Download URL: django4_tabular_export-1.0.1-py2.py3-none-any.whl
- Upload date:
- Size: 11.4 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.0.0 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b4d9df5d7101806bfc983f5a13a6b35a51fa56754d1f9f1469bad8ae45ce2fd8 |
|
MD5 | cfbb8d77e57943b12b5bcb8c1d89a871 |
|
BLAKE2b-256 | 920689193b2901a3f2f8c095aca51a3c6ec9d1eae8fbc257c5be35b6a8cc17dc |