diff --git a/accounts/admin.py b/accounts/admin.py index 59d7ab80cd20f0e7415bdab825e3ee7152d86f36..60374ee44adb5c8817a2dc400b84de7d0e33be24 100644 --- a/accounts/admin.py +++ b/accounts/admin.py @@ -8,7 +8,7 @@ from shared.admin import ExportCsvMixin admin.site.unregister(Group) @admin.register(EmailUser) -class EmailUserAdmin(admin.ModelAdmin, ExportCsvMixin): +class EmailUserAdmin(ExportCsvMixin, admin.ModelAdmin): """option d'affichage des activités dans la vue django admin""" list_display = ("email", "last_name", "first_name", "is_superuser", "is_active", "email_confirmed",) list_filter = ("is_superuser","is_active", "email_confirmed",) @@ -19,4 +19,5 @@ class EmailUserAdmin(admin.ModelAdmin, ExportCsvMixin): ordering = ("last_name", "first_name") readonly_fields = ("date_joined", "last_login",) list_per_page = 200 - actions = ["export_as_csv"] + + csv_export_exclude = ["password"] diff --git a/home/admin.py b/home/admin.py index e8803c73945c9bdde119db1ea728841ec3ac8f3a..9deaaa28256758c6fe9b8372f5246eb2c034dc18 100644 --- a/home/admin.py +++ b/home/admin.py @@ -1,6 +1,4 @@ -import csv from django.contrib import admin -from django.http import HttpResponse from home.models import InterludesActivity, InterludesParticipant, ActivityList from shared.admin import ExportCsvMixin @@ -12,29 +10,26 @@ admin.site.site_title = "Admin Interludes" @admin.register(InterludesActivity) -class InterludesActivityAdmin(admin.ModelAdmin, ExportCsvMixin): +class InterludesActivityAdmin(ExportCsvMixin, admin.ModelAdmin): """option d'affichage des activités dans la vue django admin""" list_display = ("title", "host_name", "display", "must_subscribe","on_planning") list_filter = ("display", "must_subscribe", "on_planning") ordering = ("title", "host_name",) list_editable = ("display",) list_per_page = 100 - actions = ["export_as_csv"] @admin.register(InterludesParticipant) -class InterludesParticipantAdmin(admin.ModelAdmin, ExportCsvMixin): +class InterludesParticipantAdmin(ExportCsvMixin, admin.ModelAdmin): """option d'affichage des participant dans la vue django admin""" list_display = ("user", "school", "is_registered") list_filter = ("school", "is_registered") ordering = ("user",) list_per_page = 200 - actions = ["export_as_csv"] @admin.register(ActivityList) -class ActivityListAdmin(admin.ModelAdmin, ExportCsvMixin): +class ActivityListAdmin(ExportCsvMixin, admin.ModelAdmin): """option d'affichage des choix d'activités dans la vue django admin""" list_display = ("participant", "priority", "activity",) list_filter = ("activity", "participant",) ordering = ("participant", "priority",) list_per_page = 200 - actions = ["export_as_csv"] diff --git a/shared/admin.py b/shared/admin.py index 5d3431f99ed3e3c65739d8f53876b940edc062a7..6e5db2342165741429d4b1f2c9f3ae34e8464bc5 100644 --- a/shared/admin.py +++ b/shared/admin.py @@ -1,11 +1,20 @@ +import csv + +from django.http import HttpResponse class ExportCsvMixin: - """class abstraite pour permettre l'export CSV rapide d'un modele""" + """ + class abstraite pour permettre l'export CSV rapide d'un modele + utiliser csv_export_exclude pour exclure des colonnes du fichier généré + """ def export_as_csv(self, request, queryset): """renvoie un fichier CSV contenant l'information du queryset""" meta = self.model._meta field_names = [field.name for field in meta.fields] + if self.csv_export_exclude: + field_names = [field for field in field_names if not field in self.csv_export_exclude] + response = HttpResponse(content_type='text/csv') response['Content-Disposition'] = 'attachment; filename={}.csv'.format(meta) writer = csv.writer(response) @@ -17,3 +26,6 @@ class ExportCsvMixin: return response export_as_csv.short_description = "Exporter au format CSV" + + actions = ["export_as_csv"] + csv_export_exclude = None diff --git a/shared/forms.py b/shared/forms.py index d3b5964b58a30994505c55586fe5449475ef504e..079a5340e8f845de63ae26357bef92463489a390 100644 --- a/shared/forms.py +++ b/shared/forms.py @@ -1,4 +1,4 @@ - +from django.utils.safestring import mark_safe class FormRenderMixin: """ A mixin that can be included in any form to make it render to html as we want