From f1d0a264bf165da40c21f1758e112f9e25d43c9a Mon Sep 17 00:00:00 2001
From: Eliot Berriot <contact@eliotberriot.com>
Date: Tue, 13 Sep 2016 18:25:00 +0200
Subject: [PATCH] Reduced number of query in album / tracks / artists api views

---
 funkwhale_api/music/views.py | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/funkwhale_api/music/views.py b/funkwhale_api/music/views.py
index 6622b1e..8e37c66 100644
--- a/funkwhale_api/music/views.py
+++ b/funkwhale_api/music/views.py
@@ -46,7 +46,12 @@ class ArtistViewSet(SearchMixin, viewsets.ReadOnlyModelViewSet):
     ordering_fields = ('creation_date',)
 
 class AlbumViewSet(SearchMixin, viewsets.ReadOnlyModelViewSet):
-    queryset = models.Album.objects.all().order_by('-creation_date').prefetch_related('tracks__tags')
+    queryset = (
+        models.Album.objects.all()
+                            .order_by('-creation_date')
+                            .select_related()
+                            .prefetch_related('tracks__tags',
+                                              'tracks__files'))
     serializer_class = serializers.AlbumSerializerNested
     permission_classes = [ConditionalAuthentication]
     search_fields = ['title']
@@ -63,7 +68,13 @@ class TrackViewSet(TagViewSetMixin, SearchMixin, viewsets.ReadOnlyModelViewSet):
     """
     A simple ViewSet for viewing and editing accounts.
     """
-    queryset = models.Track.objects.all().select_related('album__artist', 'artist').prefetch_related('files')
+    queryset = (models.Track.objects.all()
+                                    .select_related()
+                                    .select_related('album__artist')
+                                    .prefetch_related(
+                                        'tags',
+                                        'files',
+                                        'artist__albums__tracks__tags'))
     serializer_class = serializers.TrackSerializerNested
     permission_classes = [ConditionalAuthentication]
     search_fields = ['title', 'artist__name']
-- 
GitLab