Skip to content

Commit f40bcd0

Browse files
metpdaxtens
authored andcommitted
REST: Fix duplicate project queries
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 ec00daa dropped all the tests, they clash horribly) Signed-off-by: Daniel Axtens <dja@axtens.net>
1 parent 5805143 commit f40bcd0

File tree

4 files changed

+10
-7
lines changed

4 files changed

+10
-7
lines changed

patchwork/api/cover.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,8 @@ class CoverLetterList(ListAPIView):
103103
ordering = 'id'
104104

105105
def get_queryset(self):
106-
return CoverLetter.objects.all().prefetch_related('series')\
106+
return CoverLetter.objects.all().prefetch_related('series',
107+
'series__project')\
107108
.select_related('project', 'submitter')\
108109
.defer('content', 'headers')
109110

patchwork/api/event.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ class EventList(ListAPIView):
9696

9797
def get_queryset(self):
9898
return Event.objects.all()\
99-
.prefetch_related('project', 'patch', 'series', 'cover',
100-
'previous_state', 'current_state',
99+
.prefetch_related('project', 'patch__project', 'series__project',
100+
'cover', 'previous_state', 'current_state',
101101
'previous_delegate', 'current_delegate',
102102
'created_check')

patchwork/api/patch.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -187,8 +187,9 @@ class PatchList(ListAPIView):
187187

188188
def get_queryset(self):
189189
return Patch.objects.all()\
190-
.prefetch_related('series', 'check_set')\
191-
.select_related('project', 'state', 'submitter', 'delegate')\
190+
.prefetch_related('series', 'check_set', 'series__project')\
191+
.select_related('project', 'state', 'submitter', 'delegate',
192+
)\
192193
.defer('content', 'diff', 'headers')
193194

194195

patchwork/api/series.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,9 @@ class SeriesMixin(object):
6969
serializer_class = SeriesSerializer
7070

7171
def get_queryset(self):
72-
return Series.objects.all().prefetch_related('patches',)\
73-
.select_related('submitter', 'cover_letter', 'project')
72+
return Series.objects.all()\
73+
.prefetch_related('patches__project',)\
74+
.select_related('submitter', 'cover_letter__project', 'project')
7475

7576

7677
class SeriesList(SeriesMixin, ListAPIView):

0 commit comments

Comments
 (0)