diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-02-04 17:57:28 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-02-04 17:57:28 +0100 |
commit | 6979f76c94daae084eb0c5525e1a65734c97555f (patch) | |
tree | 4d94e87afaecbd96e5cb317ce019c84020f97895 /ishtar_common/admin.py | |
parent | b60a1e62355695783e25b0f8054aaab7d40b73e0 (diff) | |
parent | 29a7c801110121f51268df69fbe604b116d44472 (diff) | |
download | Ishtar-6979f76c94daae084eb0c5525e1a65734c97555f.tar.bz2 Ishtar-6979f76c94daae084eb0c5525e1a65734c97555f.zip |
Merge branch 'master' into v0.9
Diffstat (limited to 'ishtar_common/admin.py')
-rw-r--r-- | ishtar_common/admin.py | 46 |
1 files changed, 43 insertions, 3 deletions
diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py index bee35256f..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',) @@ -149,6 +187,7 @@ admin.site.register(models.Author, AuthorAdmin) class PersonTypeAdmin(admin.ModelAdmin): + list_display = ['label', 'txt_idx', 'available', 'comment'] model = models.PersonType filter_vertical = ('groups',) @@ -162,12 +201,13 @@ 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 general_models = [models.OrganizationType, models.SourceType, - models.AuthorType] + models.AuthorType, models.TitleType, models.Format, + models.SupportType] for model in general_models: admin.site.register(model, GeneralTypeAdmin) |