исправил ошибку + добавил валидацию
This commit is contained in:
parent
324a9d5365
commit
f31cba3030
|
|
@ -5,7 +5,7 @@ from .models import Song, FavoriteSong, PlayList, Podkast
|
|||
class SongAdmin(admin.ModelAdmin):
|
||||
list_display = ('slug', 'title', 'artist', 'genre', 'album')
|
||||
exclude = ('azura_id',)
|
||||
readonly_fields = ['slug']
|
||||
readonly_fields = ['slug', 'unique_id']
|
||||
|
||||
|
||||
@admin.register(FavoriteSong)
|
||||
|
|
|
|||
|
|
@ -54,7 +54,6 @@ class PlayList(models.Model):
|
|||
|
||||
class Meta:
|
||||
verbose_name = 'Плейлисты'
|
||||
unique_together = ('name', 'user')
|
||||
verbose_name_plural = 'Плейлисты'
|
||||
|
||||
class Podkast(models.Model):
|
||||
|
|
|
|||
|
|
@ -7,6 +7,16 @@ class SongSerializer(serializers.ModelSerializer):
|
|||
fields = ('id', 'unique_id', 'azura_id', 'title', 'artist', 'album', 'genre', 'art')
|
||||
|
||||
class PlayListSerializer(serializers.ModelSerializer):
|
||||
def validate(self, attrs):
|
||||
if PlayList.objects.filter(
|
||||
name=attrs.get('name'),
|
||||
user=attrs.get('user')
|
||||
).exists():
|
||||
raise serializers.ValidationError(
|
||||
{
|
||||
'playlist': ['Данный плейлист уже существует']
|
||||
})
|
||||
return super().validate(attrs)
|
||||
class Meta:
|
||||
model = PlayList
|
||||
fields = ('id', 'name', 'song', 'user', 'playlist_art')
|
||||
|
|
@ -18,22 +28,31 @@ class PlayListSerializer(serializers.ModelSerializer):
|
|||
return rep
|
||||
|
||||
class FavoriteSongSerializer(serializers.ModelSerializer):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.request_user = kwargs.pop('request_user', None)
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def validate(self, attrs):
|
||||
if FavoriteSong.objects.filter(
|
||||
song=attrs.get('song'),
|
||||
user=attrs.get('user')
|
||||
).exists():
|
||||
raise serializers.ValidationError(
|
||||
{
|
||||
'song': ['Данный трек уже добавлен в избранное']
|
||||
})
|
||||
return super().validate(attrs)
|
||||
|
||||
class Meta:
|
||||
model = FavoriteSong
|
||||
fields = ('id', 'song',)
|
||||
fields = ('id', 'song', 'user')
|
||||
|
||||
def to_representation(self, instance):
|
||||
rep = super().to_representation(instance)
|
||||
rep["song"] = SongSerializer(
|
||||
instance.song).data
|
||||
return rep
|
||||
return rep
|
||||
|
||||
class PodkastSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Podkast
|
||||
fields = '__all__'
|
||||
|
||||
|
||||
|
|
@ -58,18 +58,20 @@ class PlayListViewSet(GenericViewSet):
|
|||
data = request.data
|
||||
data.update(user=request.user.pk)
|
||||
serializer = self.get_serializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
serializer.save()
|
||||
return Response(serializer.data)
|
||||
if serializer.is_valid():
|
||||
serializer.save()
|
||||
return Response(serializer.data)
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
else:
|
||||
playlist_pk = self.get_queryset().objects.filter(user=request.user.pk)
|
||||
playlist_pk = self.get_queryset().filter(user=request.user.pk)
|
||||
name = f"Плейлист № {len(playlist_pk)+1}"
|
||||
data = request.data
|
||||
data.update(user=request.user.pk, name=name)
|
||||
serializer = self.get_serializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
serializer.save()
|
||||
return Response(serializer.data)
|
||||
if serializer.is_valid():
|
||||
serializer.save()
|
||||
return Response(serializer.data)
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
@action(detail=True, methods=['post'], schema=PlayListSchema())
|
||||
def update_playlist(self, request, *args, **kwargs):
|
||||
|
|
@ -107,7 +109,7 @@ class PlayListViewSet(GenericViewSet):
|
|||
song_serializer = SongSerializer(data=data)
|
||||
if song_serializer.is_valid():
|
||||
song_serializer.save()
|
||||
song = song_serializer.data['id']
|
||||
song = song_serializer.data['id']
|
||||
instance = self.get_object()
|
||||
instance.song.add(song)
|
||||
serializer = self.get_serializer(instance)
|
||||
|
|
@ -117,8 +119,9 @@ class FavoriteSongViewSet(GenericViewSet):
|
|||
azura = AzuraCast()
|
||||
queryset = FavoriteSong.objects.all()
|
||||
serializer_class = FavoriteSongSerializer
|
||||
permission_classes = (IsAuthenticated, )
|
||||
#permission_classes = (IsAuthenticated, )
|
||||
lookup_field = 'azura_id'
|
||||
|
||||
def list(self, request):
|
||||
queryset = self.get_queryset()
|
||||
serializer = self.get_serializer(queryset, many=True, request_user=request.user)
|
||||
|
|
@ -138,7 +141,6 @@ class FavoriteSongViewSet(GenericViewSet):
|
|||
data = None
|
||||
try:
|
||||
song = Song.objects.get(azura_id=request.data.get('azura_id'))
|
||||
|
||||
data = {
|
||||
'song': song.pk,
|
||||
'user': request.user.pk
|
||||
|
|
@ -154,8 +156,9 @@ class FavoriteSongViewSet(GenericViewSet):
|
|||
"song": serializer.data['id'],
|
||||
"user": request.user.pk
|
||||
}
|
||||
|
||||
serializer = self.get_serializer(data=data)
|
||||
if serializer.is_valid():
|
||||
if serializer.validate(data):
|
||||
serializer.save()
|
||||
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
||||
else:
|
||||
|
|
@ -164,7 +167,7 @@ class FavoriteSongViewSet(GenericViewSet):
|
|||
@action(detail=True, methods=['delete'])
|
||||
def delete_song(self, request, *args, **kwargs):
|
||||
try:
|
||||
song = Song.objects.get(azura_id = kwargs.get('azura_id'))
|
||||
song = Song.objects.get(azura_id=kwargs.get('azura_id'))
|
||||
queryset = self.get_queryset().get(user=request.user, song=song.pk)
|
||||
queryset.delete()
|
||||
return Response(status=status.HTTP_202_ACCEPTED)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# Generated by Django 5.0.6 on 2024-07-01 09:51
|
||||
# Generated by Django 5.0.6 on 2024-07-02 05:18
|
||||
|
||||
import django.utils.timezone
|
||||
from django.db import migrations, models
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -1,4 +1,4 @@
|
|||
# Generated by Django 5.0.6 on 2024-07-01 09:51
|
||||
# Generated by Django 5.0.6 on 2024-07-02 05:18
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
|
|
|||
Binary file not shown.
Loading…
Reference in New Issue