дописал функционал для плейлистов

This commit is contained in:
Mike0001-droid 2024-06-20 14:57:29 +05:00
parent 1f195ef8da
commit c3f3e30ad4
4 changed files with 37 additions and 5 deletions

View File

@ -41,7 +41,7 @@ class FavoriteSong(models.Model):
class PlayList(models.Model): class PlayList(models.Model):
name = models.CharField('Название плейлиста', max_length=50) name = models.CharField('Название плейлиста', max_length=50)
song = models.ManyToManyField(Song, blank=True, null=True) song = models.ManyToManyField(Song, blank=True, null=True)
user = models.ForeignKey(MyUser, verbose_name='Пользователь', on_delete=models.CASCADE, blank=True, null=True) user = models.ForeignKey(MyUser, verbose_name='Пользователь', on_delete=models.CASCADE)
art = models.ImageField('Изображение плейлиста', blank=True, null=True, upload_to="playlist_images/") art = models.ImageField('Изображение плейлиста', blank=True, null=True, upload_to="playlist_images/")

View File

@ -57,6 +57,12 @@ class DeleteSongSchema(AutoSchema):
class PlayListSchema(AutoSchema): class PlayListSchema(AutoSchema):
def get_serializer_fields(self, path, method): def get_serializer_fields(self, path, method):
return [ return [
coreapi.Field(
name='name',
location='form',
required=False,
schema=coreschema.String(description='Название плейлиста')
),
coreapi.Field( coreapi.Field(
name='playlist_id', name='playlist_id',
location='form', location='form',

View File

@ -9,7 +9,7 @@ class SongSerializer(serializers.ModelSerializer):
class PlayListSerializer(serializers.ModelSerializer): class PlayListSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = PlayList model = PlayList
fields = ('id', 'name', 'song') fields = ('id', 'name', 'song', 'user')
def to_representation(self, instance): def to_representation(self, instance):
rep = super().to_representation(instance) rep = super().to_representation(instance)

View File

@ -28,19 +28,45 @@ class PlayListViewSet(GenericViewSet):
serializer = self.get_serializer(queryset) serializer = self.get_serializer(queryset)
return Response(serializer.data, status=status.HTTP_200_OK) return Response(serializer.data, status=status.HTTP_200_OK)
except ObjectDoesNotExist: except ObjectDoesNotExist:
return Response({"error": 'Объекта не существует'}, status=status.HTTP_404_NOT_FOUND) return Response(
{'detail': 'Объекта не существует', 'error': {'PlayList': 'Объекта не существует'}},
status=status.HTTP_404_NOT_FOUND)
@action(detail=False, methods=['post'], schema=PlayListSchema())
def create_playlist(self, request):
data = request.data
data.update(user=request.user.pk)
serializer = PlayListSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
serializer.save()
return Response(serializer.data)
@action(detail=False, methods=['post'], schema=PlayListSchema())
def delete_playlist(self, request):
try:
item = PlayList.objects.get(user=request.user, pk=request.data.get('playlist_id'))
item.delete()
return Response(status=status.HTTP_202_ACCEPTED)
except ObjectDoesNotExist:
return Response(
{'detail': 'Объекта не существует', 'error': {'PlayList': 'Объекта не существует'}},
status=status.HTTP_404_NOT_FOUND)
@action(detail=False, methods=['post'], schema=PlayListSchema()) @action(detail=False, methods=['post'], schema=PlayListSchema())
def add_to_playlist(self, request): def add_to_playlist(self, request):
try: try:
song = list(Song.objects.filter(azura_id=request.data.get('azura_id')).values_list('pk', flat=True)) song = list(Song.objects.filter(azura_id=request.data.get('azura_id')).values_list('pk', flat=True))
except ObjectDoesNotExist: except ObjectDoesNotExist:
return Response({"error": 'Песни не существует'}, status=status.HTTP_404_NOT_FOUND) return Response(
{'detail': 'Песни не существует', 'error': {'Song': 'Песни не существует'}},
status=status.HTTP_404_NOT_FOUND)
try: try:
instance = PlayList.objects.get(pk=request.data.get('playlist_id')) instance = PlayList.objects.get(pk=request.data.get('playlist_id'))
except ObjectDoesNotExist: except ObjectDoesNotExist:
return Response({"error": 'Плейлиста не существует'}, status=status.HTTP_404_NOT_FOUND) return Response(
{'detail': 'Плейлиста не существует', 'error': {'PlayList': 'Плейлиста не существует'}},
status=status.HTTP_404_NOT_FOUND)
songs = list(instance.song.all().values_list('pk', flat=True))+song songs = list(instance.song.all().values_list('pk', flat=True))+song
data = { data = {