Skip to main content

Django class-based view for CSV exports

Project description


A Django class-based view for CSV export.

Build Status


  • Easy CSV exports by setting a Django model and a fields or exclude iterable
  • 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


pip install django-csv-export-view

Quick Start


class DataExportView(CSVExportView):
    model = Data
    fields = ('field1', 'field2__related_field', 'property1')

class DataExportView(CSVExportView):
    model = Data
    fields = '__all__'

class DataExportView(CSVExportView):
    model = Data
    exclude = ('id',)

    def get_queryset(self):
        queryset = super(DataExportView, self).get_queryset()
        return queryset.exclude(deleted=True)

class DataExportView(CSVExportView):
    model = Data

    def get_fields(self, queryset):
        fields = ['username', 'email']
        if self.request.user.is_superuser:
        return fields

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.

Further Customization


class DataExportView(CSVExportView):
    model = Data
    fields = '__all__'
    header = False
    specify_separator = False
    filename = 'data-export.csv'

class DataExportView(CSVExportView):
    model = Data
    fields = '__all__'

    def get_filename(self, queryset):
        return 'data-export-{!s}.csv'.format(

header - boolean - Default: True
Whether or not 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 or not to include sep=<sepaator> as the first line of the CSV file. This is useful for generating Microsoft Excel friendly CSV.

CSV Writer Options


class DataExportView(CSVExportView):
    model = Data
    fields = '__all__'

    def get_csv_writer_fmtparams(self):
        fmtparams = super(DataExportView, self).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:

Django Admin Integration


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'


Pull requests are happily accepted.


Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for django-csv-export-view, version 1.0.1
Filename, size File type Python version Upload date Hashes
Filename, size django_csv_export_view-1.0.1-py2.py3-none-any.whl (9.0 kB) File type Wheel Python version py2.py3 Upload date Hashes View
Filename, size django-csv-export-view-1.0.1.tar.gz (9.9 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page