]> git.ipfire.org Git - thirdparty/patchwork.git/commitdiff
REST: Fix duplicate project queries
authorMete Polat <metepolat2000@gmail.com>
Wed, 29 Jan 2020 19:01:22 +0000 (20:01 +0100)
committerDaniel Axtens <dja@axtens.net>
Fri, 20 Mar 2020 07:44:46 +0000 (18:44 +1100)
Eliminates duplicate project queries caused by calling
get_absolute_url() in the embedded serializers. Following foreign keys
with 'series__project' will cache the project of the series as well as
the series itself.

Signed-off-by: Mete Polat <metepolat2000@gmail.com>
Signed-off-by: Stephen Finucane <stephen@that.guru>
Closes: #335
(backported from commit ec00daae4d79bf2560034e1b2bc3cf76a98a3212
  dropped all the tests, they clash horribly)
Signed-off-by: Daniel Axtens <dja@axtens.net>
patchwork/api/cover.py
patchwork/api/event.py
patchwork/api/patch.py
patchwork/api/series.py

index b497fd853ba72d59bf1cd1707295d4ff0c3a96df..8a9e61e29b23362dee0deef4127978478697b58d 100644 (file)
@@ -103,7 +103,8 @@ class CoverLetterList(ListAPIView):
     ordering = 'id'
 
     def get_queryset(self):
-        return CoverLetter.objects.all().prefetch_related('series')\
+        return CoverLetter.objects.all().prefetch_related('series',
+                                                          'series__project')\
             .select_related('project', 'submitter')\
             .defer('content', 'headers')
 
index cce25a75e3ab8128630176eedb1d070a9afd71ac..e354ae2c0645357ab18cd7a8eb42c40ff1c518e9 100644 (file)
@@ -96,7 +96,7 @@ class EventList(ListAPIView):
 
     def get_queryset(self):
         return Event.objects.all()\
-            .prefetch_related('project', 'patch', 'series', 'cover',
-                              'previous_state', 'current_state',
+            .prefetch_related('project', 'patch__project', 'series__project',
+                              'cover', 'previous_state', 'current_state',
                               'previous_delegate', 'current_delegate',
                               'created_check')
index f772c654325a8bd04889b488bb4ecd24c064c62e..c55bf9c919dcd41f06ad45071f3a58f96c0908cf 100644 (file)
@@ -187,8 +187,9 @@ class PatchList(ListAPIView):
 
     def get_queryset(self):
         return Patch.objects.all()\
-            .prefetch_related('series', 'check_set')\
-            .select_related('project', 'state', 'submitter', 'delegate')\
+            .prefetch_related('series', 'check_set', 'series__project')\
+            .select_related('project', 'state', 'submitter', 'delegate',
+                            )\
             .defer('content', 'diff', 'headers')
 
 
index 14768efbc8d56bad16b95ae0352671a2b062c604..627b87434d3ededafac06aa860bbe3105c046a2f 100644 (file)
@@ -69,8 +69,9 @@ class SeriesMixin(object):
     serializer_class = SeriesSerializer
 
     def get_queryset(self):
-        return Series.objects.all().prefetch_related('patches',)\
-            .select_related('submitter', 'cover_letter', 'project')
+        return Series.objects.all()\
+            .prefetch_related('patches__project',)\
+            .select_related('submitter', 'cover_letter__project', 'project')
 
 
 class SeriesList(SeriesMixin, ListAPIView):