Fix #865: Performance optimization on /artists, /albums and /tracks endpoints

This commit is contained in:
Eliot Berriot 2019-09-24 09:48:04 +02:00
commit 81349e2b57
5 changed files with 88 additions and 81 deletions

View file

@ -96,8 +96,14 @@ def refetch_obj(obj, queryset):
class ArtistViewSet(common_views.SkipFilterForGetObject, viewsets.ReadOnlyModelViewSet):
queryset = (
models.Artist.objects.all()
.select_related("attributed_to")
.annotate(_tracks_count=Count("tracks"))
.prefetch_related("attributed_to")
.prefetch_related(
Prefetch(
"tracks",
queryset=models.Track.objects.all(),
to_attr="_prefetched_tracks",
)
)
)
serializer_class = serializers.ArtistWithAlbumsSerializer
permission_classes = [oauth_permissions.ScopePermission]