Skip to content

Commit 23ea776

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

File tree

1 file changed

+29
-3
lines changed

1 file changed

+29
-3
lines changed

lego/apps/events/views.py

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
import csv
2+
13
from django.db import transaction
24
from django.db.models import Count, Prefetch, Q
3-
from django.http import Http404
5+
from django.http import Http404, HttpResponse
46
from django.shortcuts import get_object_or_404
57
from django.utils import timezone
68
from django_filters.rest_framework import DjangoFilterBackend
@@ -203,6 +205,30 @@ def perform_update(self, serializer):
203205
"""
204206
serializer.save(is_ready=False)
205207

208+
@decorators.action(detail=True, methods=["GET"])
209+
def csv(self, *args, **kwargs):
210+
event = Event.objects.get(pk=kwargs["pk"])
211+
response = HttpResponse(content_type="text/csv")
212+
response["Content-Disposition"] = (
213+
f'attachment; filename="{event.title.replace(" ", "_") + "_attendees"}.csv"'
214+
)
215+
216+
writer = csv.writer(response)
217+
writer.writerow(["full_name", "username", "email", "phone", "grade"])
218+
for pool in event.pools.all():
219+
for participant in pool.registrations.all():
220+
writer.writerow(
221+
[
222+
participant.user.get_full_name(),
223+
participant.user.username,
224+
participant.user.email,
225+
participant.user.phone_number,
226+
participant.user.grade,
227+
]
228+
)
229+
230+
return response
231+
206232
@decorators.action(detail=True, methods=["GET"])
207233
def administrate(self, request, *args, **kwargs):
208234
event_id = self.kwargs.get("pk", None)
@@ -334,8 +360,8 @@ def cover_image_gallery(self, request):
334360
)
335361
serializer = self.get_serializer(queryset, many=True)
336362
return Response(serializer.data)
337-
338-
363+
364+
339365
class PoolViewSet(
340366
mixins.CreateModelMixin,
341367
mixins.UpdateModelMixin,

0 commit comments

Comments
 (0)