diff --git a/src/apps/api/serializers/competitions.py b/src/apps/api/serializers/competitions.py index 0314d831d..3b442826f 100644 --- a/src/apps/api/serializers/competitions.py +++ b/src/apps/api/serializers/competitions.py @@ -262,6 +262,18 @@ class Meta: class CompetitionParticipantSerializer(serializers.ModelSerializer): username = serializers.CharField(source='user.username') is_bot = serializers.BooleanField(source='user.is_bot') + + class Meta: + model = CompetitionParticipant + fields = ( + 'username', + 'is_bot', + ) + + +class CompetitionParticipantWithEmailSerializer(serializers.ModelSerializer): + username = serializers.CharField(source='user.username') + is_bot = serializers.BooleanField(source='user.is_bot') email = serializers.CharField(source='user.email') class Meta: diff --git a/src/apps/api/views/competitions.py b/src/apps/api/views/competitions.py index d27a3fe5e..cf9353009 100644 --- a/src/apps/api/views/competitions.py +++ b/src/apps/api/views/competitions.py @@ -25,6 +25,7 @@ from rest_framework.viewsets import ModelViewSet from api.serializers.competitions import CompetitionSerializerSimple, PhaseSerializer, \ CompetitionCreationTaskStatusSerializer, CompetitionDetailSerializer, CompetitionParticipantSerializer, \ + CompetitionParticipantWithEmailSerializer,\ FrontPageCompetitionsSerializer, PhaseResultsSerializer, CompetitionUpdateSerializer, CompetitionCreateSerializer from api.serializers.leaderboards import LeaderboardPhaseSerializer, LeaderboardSerializer from competitions.emails import send_participation_requested_emails, send_participation_accepted_emails, \ @@ -575,7 +576,6 @@ def get_leaderboard(self, request, pk): class CompetitionParticipantViewSet(ModelViewSet): queryset = CompetitionParticipant.objects.all() - serializer_class = CompetitionParticipantSerializer filter_backends = (DjangoFilterBackend, SearchFilter) filter_fields = ('user__username', 'user__email', 'status', 'competition') search_fields = ('user__username', 'user__email',) @@ -588,6 +588,14 @@ def get_queryset(self): qs = qs.select_related('user').order_by('user__username') return qs + def get_serializer_class(self): + + participants_with_email = self.request.query_params.get('participants_with_email', None) + if participants_with_email: + return CompetitionParticipantWithEmailSerializer + else: + return CompetitionParticipantSerializer + def update(self, request, *args, **kwargs): if request.method == 'PATCH': if 'status' in request.data: diff --git a/src/apps/profiles/models.py b/src/apps/profiles/models.py index a6b92e944..7c18e21bf 100644 --- a/src/apps/profiles/models.py +++ b/src/apps/profiles/models.py @@ -89,7 +89,7 @@ def get_full_name(self): return self.name def __str__(self): - return f'{self.username} | {self.email}' + return self.username @property def slug_url(self): diff --git a/src/static/riot/competitions/detail/participant_manager.tag b/src/static/riot/competitions/detail/participant_manager.tag index e894735c4..58bf48422 100644 --- a/src/static/riot/competitions/detail/participant_manager.tag +++ b/src/static/riot/competitions/detail/participant_manager.tag @@ -134,6 +134,7 @@ if (status && status !== '-') { filters.status = status } + filters.participants_with_email = true CODALAB.api.get_participants(filters) .done(participants => {