[PATCH] REST: Fix duplicate project queries
Mete Polat
metepolat2000 at gmail.com
Thu Jan 30 06:01:22 AEDT 2020
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 at gmail.com>
---
There are still some duplicates in various /api/ views but it looks like
those are caused by the REST framework itself.
patchwork/api/cover.py | 2 +-
patchwork/api/event.py | 4 ++--
patchwork/api/patch.py | 2 +-
patchwork/api/series.py | 5 +++--
4 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/patchwork/api/cover.py b/patchwork/api/cover.py
index caf9a386efa5..9e86d47e00e5 100644
--- a/patchwork/api/cover.py
+++ b/patchwork/api/cover.py
@@ -101,7 +101,7 @@ class CoverLetterList(ListAPIView):
def get_queryset(self):
return CoverLetter.objects.all()\
- .select_related('project', 'submitter', 'series')\
+ .select_related('project', 'submitter', 'series__project')\
.defer('content', 'headers')
diff --git a/patchwork/api/event.py b/patchwork/api/event.py
index a066faaec63b..fdff6a4f2fa6 100644
--- a/patchwork/api/event.py
+++ b/patchwork/api/event.py
@@ -86,7 +86,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')
diff --git a/patchwork/api/patch.py b/patchwork/api/patch.py
index a29a1ab0eb71..1a3ce9057490 100644
--- a/patchwork/api/patch.py
+++ b/patchwork/api/patch.py
@@ -176,7 +176,7 @@ class PatchList(ListAPIView):
return Patch.objects.all()\
.prefetch_related('check_set')\
.select_related('project', 'state', 'submitter', 'delegate',
- 'series')\
+ 'series__project')\
.defer('content', 'diff', 'headers')
diff --git a/patchwork/api/series.py b/patchwork/api/series.py
index f7bb8c06a6c9..df28f95dab1b 100644
--- a/patchwork/api/series.py
+++ b/patchwork/api/series.py
@@ -55,8 +55,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):
--
2.25.0
More information about the Patchwork
mailing list