aboutsummaryrefslogtreecommitdiffstats
path: root/pydis_site/apps/api
diff options
context:
space:
mode:
authorGravatar Johannes Christ <[email protected]>2023-12-15 17:05:07 +0100
committerGravatar Johannes Christ <[email protected]>2023-12-15 17:05:07 +0100
commit480c07ed126a9d498912d2c6a9685f974d55e7a0 (patch)
tree5d25f3f14fb7505dbdb0998ca3783c43decac75c /pydis_site/apps/api
parentuse curl to download the pull_request_payload artifact (#1185) (diff)
Prefetch user and actor in expanded infraction view
Prevent N+1 reported by Sentry: https://python-discord.sentry.io/issues/4721126467/?project=2714379&query=is%3Aunresolved&referrer=issue-stream&statsPeriod=90d&stream_index=3
Diffstat (limited to 'pydis_site/apps/api')
-rw-r--r--pydis_site/apps/api/serializers.py9
-rw-r--r--pydis_site/apps/api/viewsets/bot/infraction.py6
2 files changed, 7 insertions, 8 deletions
diff --git a/pydis_site/apps/api/serializers.py b/pydis_site/apps/api/serializers.py
index d7cdfd7e..cfd975c9 100644
--- a/pydis_site/apps/api/serializers.py
+++ b/pydis_site/apps/api/serializers.py
@@ -505,13 +505,8 @@ class ExpandedInfractionSerializer(InfractionSerializer):
"""Return the dictionary representation of this infraction."""
ret = super().to_representation(instance)
- user = User.objects.get(id=ret['user'])
- user_data = UserSerializer(user).data
- ret['user'] = user_data
-
- actor = User.objects.get(id=ret['actor'])
- actor_data = UserSerializer(actor).data
- ret['actor'] = actor_data
+ ret['user'] = UserSerializer(instance.user).data
+ ret['actor'] = UserSerializer(instance.actor).data
return ret
diff --git a/pydis_site/apps/api/viewsets/bot/infraction.py b/pydis_site/apps/api/viewsets/bot/infraction.py
index 09c05a74..8da82822 100644
--- a/pydis_site/apps/api/viewsets/bot/infraction.py
+++ b/pydis_site/apps/api/viewsets/bot/infraction.py
@@ -230,7 +230,11 @@ class InfractionViewSet(
})
additional_filters['type__in'] = [i.strip() for i in filter_types.split(",")]
- return self.queryset.filter(**additional_filters)
+ qs = self.queryset.filter(**additional_filters)
+ if self.serializer_class is ExpandedInfractionSerializer:
+ return qs.prefetch_related('actor', 'user')
+
+ return qs
@action(url_path='expanded', detail=False)
def list_expanded(self, *args, **kwargs) -> Response: