adds albums
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
from .track import TrackSerializer
|
from .track import TrackSerializer
|
||||||
from .artist import ArtistSerializer
|
from .artist import ArtistSerializer
|
||||||
from .user import UserSerializer
|
from .user import UserSerializer
|
||||||
|
from .album import AlbumSerializer
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
from django.db.models.functions import Extract
|
||||||
|
from playlist.models import Album
|
||||||
|
from rest_framework import serializers
|
||||||
|
|
||||||
|
class AlbumSerializer(serializers.HyperlinkedModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Album
|
||||||
|
fields = '__all__'
|
||||||
|
extra_kwargs = {
|
||||||
|
'url': {'view_name': 'api-album', 'lookup_field': 'id'},
|
||||||
|
'artists': {'view_name': 'api-artist', 'lookup_field': 'id'},
|
||||||
|
}
|
||||||
@@ -4,9 +4,10 @@ from rest_framework import serializers
|
|||||||
class TrackSerializer(serializers.HyperlinkedModelSerializer):
|
class TrackSerializer(serializers.HyperlinkedModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Track
|
model = Track
|
||||||
fields = ['url', 'id', 'name', 'artists', 'nominated_by', 'explicit', 'duration_ms', 'popularity', 'banter', 'banter_done', 'old']
|
fields = '__all__'
|
||||||
extra_kwargs = {
|
extra_kwargs = {
|
||||||
'url': {'view_name': 'api-track', 'lookup_field': 'id'},
|
'url': {'view_name': 'api-track', 'lookup_field': 'id'},
|
||||||
'artists': {'view_name': 'api-artist', 'lookup_field': 'id'},
|
'artists': {'view_name': 'api-artist', 'lookup_field': 'id'},
|
||||||
|
'album': {'view_name': 'api-album', 'lookup_field': 'id'},
|
||||||
'nominated_by': {'view_name': 'api-user', 'lookup_field': 'id'}
|
'nominated_by': {'view_name': 'api-user', 'lookup_field': 'id'}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,8 @@ urlpatterns = [
|
|||||||
path('api/artist', views.ArtistListView.as_view(), name="api-artists"),
|
path('api/artist', views.ArtistListView.as_view(), name="api-artists"),
|
||||||
path('api/users', views.UserListView.as_view(), name="api-users"),
|
path('api/users', views.UserListView.as_view(), name="api-users"),
|
||||||
path('api/user/<int:id>', views.UserDetailView.as_view(), name="api-user"),
|
path('api/user/<int:id>', views.UserDetailView.as_view(), name="api-user"),
|
||||||
|
path('api/album/<id>', views.AlbumDetailView.as_view(), name="api-album"),
|
||||||
|
path('api/album', views.AlbumListView.as_view(), name="api-albums"),
|
||||||
path('track/', views.NominateView.as_view(), name="nominate"),
|
path('track/', views.NominateView.as_view(), name="nominate"),
|
||||||
path('vote/', views.VoteView.as_view(), name="vote"),
|
path('vote/', views.VoteView.as_view(), name="vote"),
|
||||||
path('vote/undo', views.UndoView.as_view(), name="undo"),
|
path('vote/undo', views.UndoView.as_view(), name="undo"),
|
||||||
|
|||||||
@@ -3,3 +3,4 @@ from .api.root import *
|
|||||||
from .api.track import *
|
from .api.track import *
|
||||||
from .api.artist import *
|
from .api.artist import *
|
||||||
from .api.user import *
|
from .api.user import *
|
||||||
|
from .api.album import *
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
from rest_framework.views import APIView
|
||||||
|
from rest_framework.response import Response
|
||||||
|
from rest_framework.authentication import SessionAuthentication
|
||||||
|
from rest_framework.permissions import IsAuthenticated
|
||||||
|
from playlist.models import Album
|
||||||
|
from playlist.serializers import AlbumSerializer
|
||||||
|
|
||||||
|
class AlbumListView(APIView):
|
||||||
|
authentication_classes = [SessionAuthentication]
|
||||||
|
permission_classes = [IsAuthenticated]
|
||||||
|
|
||||||
|
def get(self, request):
|
||||||
|
albums = Album.objects.all()
|
||||||
|
serializer = AlbumSerializer(albums, many=True, context={'request': request})
|
||||||
|
return Response(serializer.data)
|
||||||
|
|
||||||
|
class AlbumDetailView(APIView):
|
||||||
|
authentication_classes = [SessionAuthentication]
|
||||||
|
permission_classes = [IsAuthenticated]
|
||||||
|
|
||||||
|
def get(self, request, id):
|
||||||
|
album = Album.objects.get(pk=id)
|
||||||
|
serializer = AlbumSerializer(album, context={'request': request})
|
||||||
|
return Response(serializer.data)
|
||||||
@@ -7,5 +7,7 @@ from rest_framework.reverse import reverse
|
|||||||
def api_root(request, format=None):
|
def api_root(request, format=None):
|
||||||
return Response({
|
return Response({
|
||||||
'tracks': reverse('api-tracks', request=request, format=format),
|
'tracks': reverse('api-tracks', request=request, format=format),
|
||||||
'artists': reverse('api-artists', request=request, format=format)
|
'artists': reverse('api-artists', request=request, format=format),
|
||||||
|
'users': reverse('api-users', request=request, format=format),
|
||||||
|
'albums': reverse('api-albums', request=request, format=format),
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user