diff --git a/core/admin.py b/core/admin.py index 6fdc096608eecce62d4f0fdc9e540f4d41b8a29d..65d11365a77c2a098fcee2cd2b16ce30fc7741ca 100644 --- a/core/admin.py +++ b/core/admin.py @@ -2,7 +2,6 @@ from django.contrib import admin from .models import Document, Address - # Register your models here. diff --git a/profiles/admin.py b/profiles/admin.py index 82207b0dd026276567ef92a1583a8bcd5b74d246..4f00aa12ef96c41e9b9b99522ef931d97c651dec 100644 --- a/profiles/admin.py +++ b/profiles/admin.py @@ -3,26 +3,47 @@ from django.contrib import admin from .models import Student, Tutor +import csv +from django.http import HttpResponse +class ExportCsvMixin: + 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 = "Export Selected" + class ProfileAdminMixin: """Common functionalities for profile admin panels.""" search_fields = ('user__email', 'user__first_name', 'user__last_name',) - + actions = ["export_as_csv"] @admin.register(Tutor) -class TutorAdmin(ProfileAdminMixin, admin.ModelAdmin): +class TutorAdmin(ProfileAdminMixin, admin.ModelAdmin,ExportCsvMixin): """Tutor admin panel.""" autocomplete_fields = ('address',) class Meta: # noqa model = Tutor - + actions = ["export_as_csv"] @admin.register(Student) -class StudentAdmin(ProfileAdminMixin, admin.ModelAdmin): +class StudentAdmin(ProfileAdminMixin, admin.ModelAdmin,ExportCsvMixin): """Student admin panel.""" class Meta: # noqa model = Student + actions = ["export_as_csv"] \ No newline at end of file diff --git a/projects/admin.py b/projects/admin.py index 2cdb4266757018f0fb6555f001160b373f76d267..5a65a46fdfe9f65c4e90bd4f5293542db2ec39bb 100644 --- a/projects/admin.py +++ b/projects/admin.py @@ -80,17 +80,6 @@ class EditionFormAdmin(admin.ModelAdmin): list_display = ('form', 'deadline', 'recipient',) list_filter = ('edition', 'deadline',) - actions = ['download_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) - - download_csv.short_description = ( - 'Télécharger les résponses des formulaires sélectionnés') - @admin.register(Participation) class ParticipationAdmin(admin.ModelAdmin): diff --git a/users/admin.py b/users/admin.py index 5131546c64907e3e684fb5d537becff1efd161f9..aa7448e1e334df64de7766d61e983677d798ee02 100644 --- a/users/admin.py +++ b/users/admin.py @@ -7,7 +7,8 @@ from django.utils.translation import ugettext_lazy as _ from visits.admin import ParticipationInline from .models import User - +from django.http import HttpResponse +import csv class UserParticipationInline(ParticipationInline): """Inline for Participation on the User admin panel. @@ -55,5 +56,21 @@ class CustomUserAdmin(UserAdmin): 'fields': ('email', 'password1', 'password2')} ), ) - inlines = (UserParticipationInline, ) + + 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/visits/admin.py b/visits/admin.py index 20c48dd0c15ef597419d64c2999a3ff92f2cb4cc..0f1462eef75d632764d3f9827506a47e43762a6a 100644 --- a/visits/admin.py +++ b/visits/admin.py @@ -5,7 +5,8 @@ from django.contrib import admin, messages from django.template.defaultfilters import pluralize from django.urls import reverse from django.utils.safestring import mark_safe - +from django.http import HttpResponse +import csv from .models import Participation, Place, Visit # Register your models here. @@ -125,6 +126,23 @@ class ParticipationAdmin(admin.ModelAdmin): user_link.short_description = 'Utilisateur' + 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(Visit.organizers.through) class VisitOrganizersAdmin(admin.ModelAdmin):