diff --git a/core/admin.py b/core/admin.py index 6fdc096608eecce62d4f0fdc9e540f4d41b8a29d..8adebf78b1c1f1705c5af8d76b0e4a2f94173754 100644 --- a/core/admin.py +++ b/core/admin.py @@ -2,7 +2,8 @@ from django.contrib import admin from .models import Document, Address - +from django.http import HttpResponse +import csv # Register your models here. @@ -16,6 +17,23 @@ class DocumentAdmin(admin.ModelAdmin): # reorganize fields fields = ('title', 'slug', 'content',) + actions = ["export_as_csv"] + + def export_as_csv(self, request, queryset): + meta = self.model._meta + field_names = [field.name for field in meta.fields] + + response = HttpResponse(content_type='text/csv') + response['Content-Disposition'] = 'attachment; filename={}.csv'.format( + meta) + writer = csv.writer(response) + writer.writerow(field_names) + for obj in queryset: + row = writer.writerow([getattr(obj, field) + for field in field_names]) + return response + export_as_csv.short_description = "Exporter au format CSV" + @admin.register(Address) class AddressAdmin(admin.ModelAdmin): diff --git a/projects/admin.py b/projects/admin.py index 2cdb4266757018f0fb6555f001160b373f76d267..a20211ae407c9e259336c27b9a69c4645ad28e9b 100644 --- a/projects/admin.py +++ b/projects/admin.py @@ -5,6 +5,8 @@ from django.contrib import admin from dynamicforms.views import download_multiple_forms_entries from dynamicforms.models import Form from .models import Edition, Participation, Project, EditionForm +from django.http import HttpResponse +import csv @admin.register(Project) @@ -29,6 +31,23 @@ class ProjectAdmin(admin.ModelAdmin): return obj.total_participations(state=Participation.STATE_ACCEPTED) total_accepted_participations.short_description = 'Participations totales' + actions = ["export_as_csv"] + + def export_as_csv(self, request, queryset): + meta = self.model._meta + field_names = [field.name for field in meta.fields] + + response = HttpResponse(content_type='text/csv') + response['Content-Disposition'] = 'attachment; filename={}.csv'.format( + meta) + writer = csv.writer(response) + writer.writerow(field_names) + for obj in queryset: + row = writer.writerow([getattr(obj, field) + for field in field_names]) + return response + export_as_csv.short_description = "Exporter au format CSV" + class OrganizersInline(admin.TabularInline): """Inline for edition organizers.""" @@ -72,6 +91,23 @@ class EditionAdmin(admin.ModelAdmin): return obj.participations.cancelled().count() num_cancelled.short_description = 'Annulés' + actions = ["export_as_csv"] + + def export_as_csv(self, request, queryset): + meta = self.model._meta + field_names = [field.name for field in meta.fields] + + response = HttpResponse(content_type='text/csv') + response['Content-Disposition'] = 'attachment; filename={}.csv'.format( + meta) + writer = csv.writer(response) + writer.writerow(field_names) + for obj in queryset: + row = writer.writerow([getattr(obj, field) + for field in field_names]) + return response + export_as_csv.short_description = "Exporter au format CSV" + @admin.register(EditionForm) class EditionFormAdmin(admin.ModelAdmin): @@ -80,16 +116,22 @@ class EditionFormAdmin(admin.ModelAdmin): list_display = ('form', 'deadline', 'recipient',) list_filter = ('edition', 'deadline',) - actions = ['download_csv'] + actions = ["export_as_csv"] - def download_csv(self, request, queryset): - """Download entries of selected edition forms under a ZIP file.""" - form_ids = queryset.values_list('form__id', flat=True) - forms = Form.objects.filter(id__in=form_ids) - return download_multiple_forms_entries(request, forms=forms) + def export_as_csv(self, request, queryset): + meta = self.model._meta + field_names = [field.name for field in meta.fields] - download_csv.short_description = ( - 'Télécharger les résponses des formulaires sélectionnés') + response = HttpResponse(content_type='text/csv') + response['Content-Disposition'] = 'attachment; filename={}.csv'.format( + meta) + writer = csv.writer(response) + writer.writerow(field_names) + for obj in queryset: + row = writer.writerow([getattr(obj, field) + for field in field_names]) + return response + export_as_csv.short_description = "Exporter au format CSV" @admin.register(Participation) @@ -100,3 +142,20 @@ class ParticipationAdmin(admin.ModelAdmin): list_filter = ('edition', 'submitted', 'state',) readonly_fields = ('submitted',) search_fields = ('user__first_name', 'user__last_name', 'user__email',) + + actions = ["export_as_csv"] + + def export_as_csv(self, request, queryset): + meta = self.model._meta + field_names = [field.name for field in meta.fields] + + response = HttpResponse(content_type='text/csv') + response['Content-Disposition'] = 'attachment; filename={}.csv'.format( + meta) + writer = csv.writer(response) + writer.writerow(field_names) + for obj in queryset: + row = writer.writerow([getattr(obj, field) + for field in field_names]) + return response + export_as_csv.short_description = "Exporter au format CSV" diff --git a/users/admin.py b/users/admin.py index 5131546c64907e3e684fb5d537becff1efd161f9..78baa2596b7e26f68840b205ed8eb01e70e9cc79 100644 --- a/users/admin.py +++ b/users/admin.py @@ -8,6 +8,12 @@ from visits.admin import ParticipationInline from .models import User +actions = ["export_as_csv"] + +def export_as_csv(self, request, queryset): + pass + +export_as_csv.short_description = "Export Selected" class UserParticipationInline(ParticipationInline): """Inline for Participation on the User admin panel.