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