From 2f3873887c2f6bbe28ae5c520a62b5bada0ff9f8 Mon Sep 17 00:00:00 2001 From: Chris Lovering Date: Sun, 5 Jul 2026 18:04:52 -0400 Subject: [PATCH] Fix n+1 on mailing list .values('hash') bypassed the prefetch_related('seen_items') cache and re-hit the database once per mailing list. Using objects.all() reuses the prefetched results --- pydis_site/apps/api/serializers.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pydis_site/apps/api/serializers.py b/pydis_site/apps/api/serializers.py index 2b4bf3956..5d87ca427 100644 --- a/pydis_site/apps/api/serializers.py +++ b/pydis_site/apps/api/serializers.py @@ -792,9 +792,9 @@ class Meta: class MailingListSeenItemListSerializer(ListSerializer): """A class providing (de-)serialization of `MailingListSeenItem` instances as a list.""" - def to_representation(self, objects: list[MailingListSeenItem]) -> list[str]: + def to_representation(self, objects: QuerySet[MailingListSeenItem]) -> list[str]: """Return the hashes of each seen mailing list item.""" - return [obj['hash'] for obj in objects.values('hash')] + return [obj.hash for obj in objects.all()] class MailingListSeenItemSerializer(ModelSerializer):