From c1c013f5b0d904cddc66a09518c2510459a3682a Mon Sep 17 00:00:00 2001 From: Sanjay B Date: Fri, 24 Apr 2020 22:05:21 +0530 Subject: [PATCH 1/2] add prefetch related to bring down queries from 300+ to 9 on field report api --- api/drf_views.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/api/drf_views.py b/api/drf_views.py index 4cf3e4da1..c4a7a6726 100644 --- a/api/drf_views.py +++ b/api/drf_views.py @@ -416,6 +416,12 @@ class Meta: class FieldReportViewset(ReadOnlyVisibilityViewset): authentication_classes = (TokenAuthentication,) visibility_model_class = FieldReport + + def get_queryset(self, *args, **kwargs): + qset = super().get_queryset(*args, **kwargs) + return qset.prefetch_related('actions_taken', 'districts', 'countries', 'actions_taken__actions', 'regions', 'dtype', 'event') + + def get_serializer_class(self): if self.action == 'list': request_format_type = self.request.GET.get('format', 'json') From 5f009e71d874ccaa7ae7a3ee6f55b2332629d9c1 Mon Sep 17 00:00:00 2001 From: Sanjay B Date: Sat, 25 Apr 2020 13:44:05 +0530 Subject: [PATCH 2/2] use select_related where appropriate, clean up long line --- api/drf_views.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/api/drf_views.py b/api/drf_views.py index c4a7a6726..642c880e2 100644 --- a/api/drf_views.py +++ b/api/drf_views.py @@ -419,7 +419,9 @@ class FieldReportViewset(ReadOnlyVisibilityViewset): def get_queryset(self, *args, **kwargs): qset = super().get_queryset(*args, **kwargs) - return qset.prefetch_related('actions_taken', 'districts', 'countries', 'actions_taken__actions', 'regions', 'dtype', 'event') + qset = qset.select_related('dtype', 'event') + return qset.prefetch_related('actions_taken', 'actions_taken__actions', + 'countries', 'districts', 'regions') def get_serializer_class(self):