дописал функционал для плейлистов
This commit is contained in:
parent
1f195ef8da
commit
c3f3e30ad4
|
|
@ -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/")
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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',
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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 = {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue