"""Profiles admin panel.""" from django.contrib import admin from .models import Student, Tutor from .MultiSelectFieldListFilter import MultiSelectFieldListFilter import codecs 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) response.write(codecs.BOM_UTF8) # force response to be UTF-8 writer = csv.writer(response, delimiter=';') 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 sélection (en .csv)" 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, ExportCsvMixin): """Tutor admin panel.""" autocomplete_fields = ('address',) class Meta: # noqa model = Tutor actions = ["export_as_csv"] #hello @admin.register(Student) class StudentAdmin(ProfileAdminMixin, admin.ModelAdmin, ExportCsvMixin): """Student admin panel.""" list_filter = (('school', MultiSelectFieldListFilter), 'year', 'registration__validated') class Meta: # noqa model = Student ordering = ['-updated_date'] actions = ["export_as_csv"]