Simple spreadsheet exports from Django 1.8+
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.
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.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.Install django-tabular-export:
pip install django-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)
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'
The TABULAR_RESPONSE_DEBUG = True
setting will cause all views to return HTML tables
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4