From 1d59af9b93b6d14a21e6e46e992166ecc3cbf53e Mon Sep 17 00:00:00 2001 From: emillub <145599402+emillub@users.noreply.github.com> Date: Wed, 26 Mar 2025 20:15:09 +0100 Subject: [PATCH] Add export csv file with event attendees --- lego/apps/events/views.py | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/lego/apps/events/views.py b/lego/apps/events/views.py index ca8c7f65c..2c44671a5 100644 --- a/lego/apps/events/views.py +++ b/lego/apps/events/views.py @@ -1,6 +1,8 @@ +import csv + from django.db import transaction from django.db.models import Count, Prefetch, Q -from django.http import Http404 +from django.http import Http404, HttpResponse from django.shortcuts import get_object_or_404 from django.utils import timezone from django_filters.rest_framework import DjangoFilterBackend @@ -203,6 +205,30 @@ def perform_update(self, serializer): """ serializer.save(is_ready=False) + @decorators.action(detail=True, methods=["GET"]) + def csv(self, *args, **kwargs): + event = Event.objects.get(pk=kwargs["pk"]) + response = HttpResponse(content_type="text/csv") + response["Content-Disposition"] = ( + f'attachment; filename="{event.title.replace(" ", "_") + "_attendees"}.csv"' + ) + + writer = csv.writer(response) + writer.writerow(["full_name", "username", "email", "phone", "grade"]) + for pool in event.pools.all(): + for participant in pool.registrations.all(): + writer.writerow( + [ + participant.user.get_full_name(), + participant.user.username, + participant.user.email, + participant.user.phone_number, + participant.user.grade, + ] + ) + + return response + @decorators.action(detail=True, methods=["GET"]) def administrate(self, request, *args, **kwargs): event_id = self.kwargs.get("pk", None) @@ -334,8 +360,8 @@ def cover_image_gallery(self, request): ) serializer = self.get_serializer(queryset, many=True) return Response(serializer.data) - - + + class PoolViewSet( mixins.CreateModelMixin, mixins.UpdateModelMixin,