django-csv-export-view
A Django class-based view for CSV export.
Features
- Easy CSV exports by setting a Django
modeland afieldsorexcludeiterable - Works with existing class-based view mixins for access control
- Generates Microsoft Excel friendly CSV by default
- Proper HTTP headers set for CSV
- Easy to override defaults as needed
- Easy integration into Django Admin
Installation
pip install django-csv-export-view
Examples of basic options
Specify a model and fields. Optionally override get_queryset().
from csv_export.views import CSVExportView
from .models import MyModel
class DataExportView(CSVExportView):
model = MyModel
fields = ("field", "related", "property")
# When using related fields you will likely want to override get_queryset()
# to use select_related(), prefetch_related() or generally filter the results.
def get_queryset(self):
return super().get_queryset().select_related("related")
# -- OR --
return super().get_queryset().prefetch_related("related")
# -- OR --
return queryset.exclude(deleted=True)
# etc
You can also use related fields and properties.
from csv_export.views import CSVExportView
from .models import MyModel
class DataExportView(CSVExportView):
model = MyModel
fields = ("field", "related__field", "property")
__all__ is supported if you want all fields. Model properties are not included with __all__.
from csv_export.views import CSVExportView
from .models import MyModel
class DataExportView(CSVExportView):
model = MyModel
fields = "__all__"
exclude can be used instead of fields.
from csv_export.views import CSVExportView
from .models import MyModel
class DataExportView(CSVExportView):
model = MyModel
exclude = ("id",)
Override get_fields() for dynamic control of the fields.
from csv_export.views import CSVExportView
from .models import MyModel
class DataExportView(CSVExportView):
model = MyModel
def get_fields(self, queryset):
fields = ["username", "email"]
if self.request.user.is_superuser:
fields.append("birth_date")
return fields
Basic options
fields / exclude: An iterable of field names and properties. You cannot set both fields and exclude.
fields can also be "__all__" to export all fields. Model properties are not included when "__all__" is used.
Related field can be used with __. Override get_fields(self, queryset) for custom behaviour not supported by the
default logic.
model: The model to use for the CSV export queryset. Override get_queryset() if you need a custom queryset.
Examples of advanced options
header, specify_separator and filename can be use for more customization.
from csv_export.views import CSVExportView
from .models import MyModel
class DataExportView(CSVExportView):
model = MyModel
fields = "__all__"
header = False
specify_separator = False
filename = "data-export.csv"
Using verbose_names can be turned off.
from csv_export.views import CSVExportView
from .models import MyModel
class DataExportView(CSVExportView):
model = MyModel
fields = "__all__"
verbose_names = False
Override get_filename() for dynamic control of the filename.
from django.utils import timezone
from csv_export.views import CSVExportView
from .models import MyModel
class DataExportView(CSVExportView):
model = MyModel
fields = "__all__"
def get_filename(self, queryset):
return "data-export-{!s}.csv".format(timezone.now())
Advanced options
header - boolean - Default: True
Whether to include the header in the CSV.
filename - string - Default: Dasherized version of verbose_name_plural from queryset.model.
Override get_filename(self, queryset) if a dynamic filename is required.
specify_separator - boolean - Default: True
Whether to include sep=<sepaator> as the first line of the CSV file. This is useful for generating Microsoft
Excel friendly CSV.
verbose_names - boolean - Default: True
Whether to use capitalized verbose column names in the header of the CSV file. If False, field names are used
instead.
CSV Writer Options
Example:
from csv_export.views import CSVExportView
from .models import MyModel
class DataExportView(CSVExportView):
model = MyModel
fields = "__all__"
def get_csv_writer_fmtparams(self):
fmtparams = super().get_csv_writer_fmtparams()
fmtparams["delimiter"] = "|"
return fmtparams
Override get_csv_writer_fmtparams(self) and return a dictionary of csv write format parameters. Default format
parameters are: dialect="excel" and quoting=csv.QUOTE_ALL. See all available options in the Python docs:
https://docs.python.org/3.11/library/csv.html#csv.writer
Django Admin Integration
Example:
from django.contrib import admin
from csv_export.views import CSVExportView
from .models import MyModel
@admin.register(MyModel)
class DataAdmin(admin.ModelAdmin):
actions = ("export_data_csv",)
def export_data_csv(self, request, queryset):
view = CSVExportView(queryset=queryset, fields="__all__")
return view.get(request)
export_data_csv.short_description = "Export CSV for selected Data records"
Contributions
Pull requests are happily accepted.
Alternatives
https://github.com/django-import-export/django-import-export/
Metadata
Release files for django-csv-export-view 2.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| django-csv-export-view-2.0.1.tar.gz | 10.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| django_csv_export_view-2.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 20.3 kB
Release files / django-csv-export-view-2.0.1.tar.gz
| Download URL | django-csv-export-view-2.0.1.tar.gz |
|---|---|
| Size | 10.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c6c78b0fc8fb990cff6eaa7dac19cf208f33868b429b62d5d65208f22038432b
|
|
BLAKE2b-256 checksum How to use checksums |
36881b41f77992b6017fbac1faa0878b4874624765f70388bb18faadf6807ac1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.1.1 CPython/3.11.2
|
Release files / django_csv_export_view-2.0.1-py3-none-any.whl
| Download URL | django_csv_export_view-2.0.1-py3-none-any.whl |
|---|---|
| Size | 10.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ae6aab6938fa2653d7d8b292e06efd394847a81523a792323b281d3b0dac408b
|
|
BLAKE2b-256 checksum How to use checksums |
0f16863c0fd40ae88c8b121bd567d2e81e566720236e737c3241ac2fc134151f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.1.1 CPython/3.11.2
|