summaryrefslogtreecommitdiff
path: root/ishtar_common/admin.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/admin.py')
-rw-r--r--ishtar_common/admin.py42
1 files changed, 40 insertions, 2 deletions
diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py
index e19583c85..7b671caae 100644
--- a/ishtar_common/admin.py
+++ b/ishtar_common/admin.py
@@ -26,10 +26,11 @@ from django.conf import settings
from django.contrib import admin
from django.contrib.auth.admin import GroupAdmin
from django.contrib.auth.models import Group
-from django.http import HttpResponseRedirect
+from django.http import HttpResponseRedirect, HttpResponse
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.template.defaultfilters import slugify
+from django.utils.translation import ugettext_lazy as _, ugettext
from django import forms
@@ -75,6 +76,43 @@ def gen_import_generic(self, request, queryset):
gen_import_generic.short_description = "Import from a CSV file"
+def export_as_csv_action(description=_(u"Export selected 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(mimetype='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
+
+
class HistorizedObjectAdmin(admin.ModelAdmin):
readonly_fields = ('history_modifier',)
@@ -163,7 +201,7 @@ admin.site.register(models.GlobalVar, GlobalVarAdmin)
class GeneralTypeAdmin(admin.ModelAdmin):
list_display = ['label', 'txt_idx', 'available', 'comment']
- actions = ['import_generic']
+ actions = ['import_generic', export_as_csv_action()]
import_generic = gen_import_generic