Skip to content

Commit 9c7d5dc

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

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,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)

0 commit comments

Comments
 (0)