Fix #895: "Display tracks count instead of albums count for artists with no albums"

This commit is contained in:
Ciarán Ainsworth 2019-08-20 12:12:41 +02:00 committed by Eliot Berriot
parent 7e8e21e1d1
commit 2e0883d44c
7 changed files with 26 additions and 7 deletions

View file

@ -79,6 +79,7 @@ class ArtistWithAlbumsSerializer(serializers.ModelSerializer):
albums = ArtistAlbumSerializer(many=True, read_only=True)
tags = serializers.SerializerMethodField()
attributed_to = serializers.SerializerMethodField()
tracks_count = serializers.SerializerMethodField()
class Meta:
model = models.Artist
@ -92,6 +93,7 @@ class ArtistWithAlbumsSerializer(serializers.ModelSerializer):
"is_local",
"tags",
"attributed_to",
"tracks_count",
)
def get_tags(self, obj):
@ -100,6 +102,9 @@ class ArtistWithAlbumsSerializer(serializers.ModelSerializer):
get_attributed_to = serialize_attributed_to
def get_tracks_count(self, o):
return getattr(o, "_tracks_count", None)
class ArtistSimpleSerializer(serializers.ModelSerializer):
class Meta:

View file

@ -94,7 +94,11 @@ def refetch_obj(obj, queryset):
class ArtistViewSet(common_views.SkipFilterForGetObject, viewsets.ReadOnlyModelViewSet):
queryset = models.Artist.objects.all().select_related("attributed_to")
queryset = (
models.Artist.objects.all()
.select_related("attributed_to")
.annotate(_tracks_count=Count("tracks"))
)
serializer_class = serializers.ArtistWithAlbumsSerializer
permission_classes = [oauth_permissions.ScopePermission]
required_scope = "libraries"