Usage

The API of the Exporter class is subject to change and therefore not yet documented.

Admin actions

The library provides admin action factories for csv and xlsx formats.

from django.contrib import admin
from django_dataexporter.admin import export_csv_action_factory, export_excel_action_factory

from .models import User


class UserAdmin(admin.ModelAdmin):
    export_fields = ('id', 'first_name', 'last_name')
    actions = [
        export_csv_action_factory(fields=export_fields, header=True, label='Export as CSV'),
        export_excel_action_factory(fields=export_fields, header=True, label='Export as XLSX'),
    ]

The dataexporter classes can be also used inside an admin function. It is especially handy when defining a custom dataexporter class.

from django.contrib import admin
from django_dataexporter.csv import CsvExporter
from django_dataexporter.excel import ExcelExporter

from .models import User


class CustomExporter(CsvExporter):
    export_name = 'Custom'
    fields = ['first_name', 'last_name']
    field_header_verbose_names = {'last_name': 'Surname'}
    filename_extension = 'txt'

    def get_data_value(self, record, field):
        record = super().get_data_value(record, field)
        return record or 'Sorry, no data here.'


class UserAdmin(admin.ModelAdmin):
    export_fields = ('id', 'first_name', 'last_name')
    actions = ['csv_export', 'excel_export', 'custom_export']

    def csv_export(self, request, queryset):
        exporter = CsvExporter(fields=self.export_fields, header=True)
        return exporter.get_http_response(request, queryset)
    csv_export.short_description = 'Export surveys as CSV'

    def excel_export(self, request, queryset):
        exporter = ExcelExporter(fields=self.export_fields, header=True)
        return exporter.get_http_response(request, queryset)
    excel_export.short_description = 'Export surveys as XLSX'

    def custom_export(self, request, queryset):
        exporter = CustomExporter()
        return exporter.get_http_response(request, queryset)
    custom_export.short_description = 'Export name and surname only'