mirror of
https://github.com/Alexander-D-Karpov/akarpov
synced 2024-11-22 00:26:36 +03:00
fixed albums and authors, added related objects
This commit is contained in:
parent
127b4b6e11
commit
7b48929e38
|
@ -239,10 +239,20 @@ class Meta:
|
|||
|
||||
class FullAlbumSerializer(serializers.ModelSerializer):
|
||||
songs = ListSongSerializer(many=True, read_only=True)
|
||||
artists = serializers.SerializerMethodField("get_artists")
|
||||
|
||||
@extend_schema_field(AuthorSerializer(many=True))
|
||||
def get_artists(self, obj):
|
||||
return AuthorSerializer(
|
||||
Author.objects.cache().filter(
|
||||
songs__id__in=obj.songs.cache().all().values("id")
|
||||
),
|
||||
many=True,
|
||||
).data
|
||||
|
||||
class Meta:
|
||||
model = Album
|
||||
fields = ["name", "link", "image", "songs"]
|
||||
fields = ["name", "link", "image", "songs", "artists"]
|
||||
extra_kwargs = {
|
||||
"link": {"read_only": True},
|
||||
"image": {"read_only": True},
|
||||
|
@ -251,10 +261,20 @@ class Meta:
|
|||
|
||||
class FullAuthorSerializer(serializers.ModelSerializer):
|
||||
songs = ListSongSerializer(many=True, read_only=True)
|
||||
albums = serializers.SerializerMethodField(method_name="get_albums")
|
||||
|
||||
@extend_schema_field(AlbumSerializer(many=True))
|
||||
def get_albums(self, obj):
|
||||
return AlbumSerializer(
|
||||
Album.objects.cache().filter(
|
||||
songs__id__in=obj.songs.cache().all().values("id")
|
||||
),
|
||||
many=True,
|
||||
).data
|
||||
|
||||
class Meta:
|
||||
model = Author
|
||||
fields = ["name", "link", "image", "songs"]
|
||||
fields = ["name", "link", "image", "songs", "albums"]
|
||||
extra_kwargs = {
|
||||
"link": {"read_only": True},
|
||||
"image": {"read_only": True},
|
||||
|
|
|
@ -272,9 +272,7 @@ class ListAlbumsAPIView(generics.ListAPIView):
|
|||
serializer_class = AlbumSerializer
|
||||
pagination_class = StandardResultsSetPagination
|
||||
permission_classes = [permissions.AllowAny]
|
||||
|
||||
def get_queryset(self):
|
||||
return Album.objects.all()
|
||||
queryset = Album.objects.cache().all()
|
||||
|
||||
|
||||
class RetrieveUpdateDestroyAlbumAPIView(
|
||||
|
@ -284,15 +282,14 @@ class RetrieveUpdateDestroyAlbumAPIView(
|
|||
lookup_url_kwarg = "slug"
|
||||
permission_classes = [IsAdminOrReadOnly]
|
||||
serializer_class = FullAlbumSerializer
|
||||
queryset = Album.objects.cache().all()
|
||||
|
||||
|
||||
class ListAuthorsAPIView(generics.ListAPIView):
|
||||
serializer_class = AuthorSerializer
|
||||
pagination_class = StandardResultsSetPagination
|
||||
permission_classes = [permissions.AllowAny]
|
||||
|
||||
def get_queryset(self):
|
||||
return Author.objects.all()
|
||||
queryset = Author.objects.cache().all()
|
||||
|
||||
|
||||
class RetrieveUpdateDestroyAuthorAPIView(
|
||||
|
@ -302,6 +299,7 @@ class RetrieveUpdateDestroyAuthorAPIView(
|
|||
lookup_url_kwarg = "slug"
|
||||
permission_classes = [IsAdminOrReadOnly]
|
||||
serializer_class = FullAuthorSerializer
|
||||
queryset = Author.objects.cache().all()
|
||||
|
||||
|
||||
class ListenSongAPIView(generics.GenericAPIView):
|
||||
|
|
Loading…
Reference in New Issue
Block a user