From 6e54faf605985f9d51dcdf384e10155f4adf6bae Mon Sep 17 00:00:00 2001 From: Mike0001-droid Date: Mon, 10 Jun 2024 14:37:39 +0500 Subject: [PATCH] =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20=D0=9C?= =?UTF-8?q?=D0=B8=D0=BA=D0=BE=D1=81=D0=B0...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/proj/audio/views.py | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/server/proj/audio/views.py b/server/proj/audio/views.py index fc8dbd4..a2e818b 100644 --- a/server/proj/audio/views.py +++ b/server/proj/audio/views.py @@ -1,5 +1,5 @@ from django.shortcuts import render -from rest_framework.viewsets import ViewSet +from rest_framework.viewsets import ViewSet, GenericViewSet from rest_framework.response import Response from rest_framework.decorators import action from rest_framework import status @@ -11,34 +11,33 @@ from .schemas import SongSchema, DeleteSongSchema from .models import Song, FavoriteSong from .serializers import SongSerializer, FavoriteSongSerializer -class SongViewSet(ViewSet): +class SongViewSet(GenericViewSet): permission_classes_by_action = { 'list': [IsAuthenticated], 'retrieve': [IsAuthenticated], 'create_song': [IsAuthenticated] } + def list(self, request): - user_pk = request.user.pk - songs_pk = [i.song.pk for i in get_list_or_404(FavoriteSong, user=user_pk)] - queryset = Song.objects.filter(id__in = songs_pk) + songs_pk = FavoriteSong.objects.filter(user=request.user, song__isnull=False).values_list('song_id', flat=True) + queryset = Song.objects.filter(id__in=songs_pk) serializer = SongSerializer(queryset, many=True) return Response(serializer.data) def retrieve(self, request, pk=None): - user_pk = request.user.pk song_obj = get_object_or_404(Song, azura_id=pk).pk - queryset = FavoriteSong.objects.filter(user=user_pk, song=song_obj) - serializer = FavoriteSongSerializer(queryset[0]) + queryset = FavoriteSong.objects.get(user=request.user.pk, song=song_obj) + serializer = FavoriteSongSerializer(queryset) return Response(serializer.data) @action(detail=False, methods=['post'], schema=SongSchema()) def create_song(self, request): - song = Song.objects.filter(azura_id = request.data['azura_id']) + song = get_object_or_404(Song, azura_id=request.data['azura_id']) data = None #Если трек есть в базе if song: data = { - "song": song[0].id, + "song": song.pk, "user": request.user.pk } #Если трека нету в базе @@ -56,10 +55,9 @@ class SongViewSet(ViewSet): if serializer.is_valid(): serializer.save() data = { - "song": song[0].id, + "song": serializer.data['id'], "user": request.user.pk } - serializer = FavoriteSongSerializer(data=data) if serializer.is_valid(): serializer.save()