Skip to content

Commit 9e97906

Browse files
authored
fix member counts (#151)
1 parent 0f9755d commit 9e97906

File tree

2 files changed

+10
-13
lines changed

2 files changed

+10
-13
lines changed

src/team/serializers.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,15 +55,12 @@ def get_incorrect_solves(self, instance):
5555

5656

5757
class ListTeamSerializer(serializers.ModelSerializer):
58-
members = serializers.SerializerMethodField()
58+
members = serializers.IntegerField(read_only=True, source="members_count")
5959

6060
class Meta:
6161
model = Team
6262
fields = ["id", "name", "members"]
6363

64-
def get_members(self, instance):
65-
return instance.members.count()
66-
6764

6865
class AdminTeamSerializer(IncorrectSolvesMixin, serializers.ModelSerializer):
6966
members = MinimalMemberSerializer(many=True, read_only=True)

src/team/views.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from django.http import Http404
2+
from django.db.models import Count
23
from rest_framework import filters
34
from rest_framework.generics import (
45
CreateAPIView,
@@ -69,29 +70,28 @@ class TeamViewSet(AdminListModelViewSet):
6970
def get_queryset(self):
7071
if self.action == "list":
7172
if self.request.user.is_staff:
72-
return Team.objects.order_by("id").prefetch_related("members")
73-
return Team.objects.filter(is_visible=True).order_by("id").prefetch_related("members")
74-
if self.request.user.is_staff and not self.request.user.should_deny_admin():
75-
return Team.objects.order_by("id").prefetch_related(
73+
qs = Team.objects.order_by("id").prefetch_related("members")
74+
else:
75+
qs = Team.objects.filter(is_visible=True).order_by("id").prefetch_related("members")
76+
elif self.request.user.is_staff and not self.request.user.should_deny_admin():
77+
qs = Team.objects.order_by("id").prefetch_related(
7678
"solves",
7779
"members",
7880
"hints_used",
7981
"solves__challenge",
8082
"solves__score",
8183
"solves__solved_by",
8284
)
83-
return (
84-
Team.objects.filter(is_visible=True)
85-
.order_by("id")
86-
.prefetch_related(
85+
else:
86+
qs = Team.objects.filter(is_visible=True).order_by("id").prefetch_related(
8787
"solves",
8888
"members",
8989
"hints_used",
9090
"solves__challenge",
9191
"solves__score",
9292
"solves__solved_by",
9393
)
94-
)
94+
return qs.annotate(members_count=Count("members"))
9595

9696

9797
class CreateTeamView(CreateAPIView):

0 commit comments

Comments
 (0)