From 4bbc3db4b5d6dbbf4db5602e69ae56f89630ea5d Mon Sep 17 00:00:00 2001 From: Hieu Nguyen Date: Sun, 20 Oct 2013 22:50:43 +0300 Subject: [PATCH] Add export CSV function to admin --- api/pyconfi2013/admin.py | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/api/pyconfi2013/admin.py b/api/pyconfi2013/admin.py index 04ccffe..ee2bb0a 100644 --- a/api/pyconfi2013/admin.py +++ b/api/pyconfi2013/admin.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- from datetime import date, timedelta +import csv from django.contrib import admin from django.http import HttpResponse @@ -124,8 +125,13 @@ class RegistrationAdmin(admin.ModelAdmin): 'ticket_type', 'country', 'dinner', 'accommodation', 'preconf') ordering = ['-registered_timestamp'] - actions = ['send_bill', 'send_payment_notification', 'show_email_addresses', - 'send_late_bird_bill'] + actions = [ + 'send_bill', + 'send_payment_notification', + 'show_email_addresses', + 'send_late_bird_bill', + 'export_as_csv', + ] def bill_overdue(self, obj): return (obj.billed and not obj.paid and @@ -230,4 +236,18 @@ def generate_emails(): show_email_addresses.short_description = ('Show email addresses of the ' 'selected registrants') + def export_as_csv(self, request, queryset): + opts = self.model._meta + response = HttpResponse(mimetype='text/csv') + response['Content-Disposition'] = 'attachment; filename=%s.csv' % unicode(opts).replace('.', '_') + writer = csv.writer(response) + field_names = [field.name for field in opts.fields] + # Write a first row with header information + writer.writerow(field_names) + # Write data rows + for obj in queryset: + writer.writerow([getattr(obj, field) for field in field_names]) + return response + export_as_csv.short_description = 'Export registrations as CSV file' + admin.site.register(Registration, RegistrationAdmin)