Skip to content

Instantly share code, notes, and snippets.

@jeremyjbowers
Created November 24, 2015 21:47
Show Gist options
  • Select an option

  • Save jeremyjbowers/e8d007446155c12033e6 to your computer and use it in GitHub Desktop.

Select an option

Save jeremyjbowers/e8d007446155c12033e6 to your computer and use it in GitHub Desktop.

Revisions

  1. jeremyjbowers created this gist Nov 24, 2015.
    39 changes: 39 additions & 0 deletions actions.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,39 @@
    import csv
    from django.http import HttpResponse

    def export_as_csv_action(description="Export selected objects as CSV file", fields=None, exclude=None, header=True):
    """
    This function returns an export csv action
    'fields' and 'exclude' work like in django ModelForm
    'header' is whether or not to output the column names as the first row
    """
    def export_as_csv(modeladmin, request, queryset):
    """
    Generic csv export admin action.
    based on http://djangosnippets.org/snippets/1697/
    """
    opts = modeladmin.model._meta
    field_names = set([field.name for field in opts.fields])

    if fields:
    fieldset = set(fields)
    field_names = field_names & fieldset

    elif exclude:
    excludeset = set(exclude)
    field_names = field_names - excludeset

    response = HttpResponse(content_type='text/csv')
    response['Content-Disposition'] = 'attachment; filename=%s.csv' % unicode(opts).replace('.', '_')

    writer = csv.writer(response)

    if header:
    writer.writerow(list(field_names))
    for obj in queryset:
    writer.writerow([unicode(getattr(obj, field)).encode("utf-8","replace") for field in field_names])

    return response

    export_as_csv.short_description = description
    return export_as_csv
    7 changes: 7 additions & 0 deletions admin.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,7 @@
    from django.contrib import admin

    from actions import export_as_csv_action

    class CaseAdmin(admin.ModelAdmin):
    ...
    actions = [export_as_csv_action("CSV Export", fields=['field1', 'field2'])]