Skip to content

Commit f2dec6b

Browse files
committed
Add export csv file with event attendees
1 parent 797a2d6 commit f2dec6b

File tree

1 file changed

+27
-1
lines changed

1 file changed

+27
-1
lines changed

lego/apps/events/views.py

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
import csv
12
from django.db import transaction
23
from django.db.models import Count, Prefetch, Q
3-
from django.http import Http404
4+
from django.http import Http404, HttpResponse
45
from django.shortcuts import get_object_or_404
56
from django.utils import timezone
67
from django_filters.rest_framework import DjangoFilterBackend
@@ -203,6 +204,30 @@ def perform_update(self, serializer):
203204
"""
204205
serializer.save(is_ready=False)
205206

207+
@decorators.action(detail=True, methods=["GET"])
208+
def csv(self, *args, **kwargs):
209+
event = Event.objects.get(pk=kwargs["pk"])
210+
response = HttpResponse(content_type="text/csv")
211+
response["Content-Disposition"] = (
212+
f'attachment; filename="{event.title.replace(" ", "_") + "_attendees"}.csv"'
213+
)
214+
215+
writer = csv.writer(response)
216+
writer.writerow(["full_name", "username", "email", "phone", "grade"])
217+
for pool in event.pools.all():
218+
for participant in pool.registrations.all():
219+
writer.writerow(
220+
[
221+
participant.user.get_full_name(),
222+
participant.user.username,
223+
participant.user.email,
224+
participant.user.phone_number,
225+
participant.user.grade,
226+
]
227+
)
228+
229+
return response
230+
206231
@decorators.action(detail=True, methods=["GET"])
207232
def administrate(self, request, *args, **kwargs):
208233
event_id = self.kwargs.get("pk", None)
@@ -334,6 +359,7 @@ def cover_image_gallery(self, request):
334359
)
335360
serializer = self.get_serializer(queryset, many=True)
336361
return Response(serializer.data)
362+
337363

338364

339365
class PoolViewSet(

0 commit comments

Comments
 (0)