viewsets.py 1.0 KB

123456789101112131415161718192021222324252627282930313233343536
  1. from rest_framework import viewsets
  2. from .filters import AlbumFilter, ArtistFilter, TrackFilter
  3. from .models import Album, Artist, Track
  4. from .serializers import AlbumSerializer, ArtistSerializer, TrackSerializer
  5. class BaseAPIViewSet(viewsets.ReadOnlyModelViewSet):
  6. lookup_field = "uuid"
  7. lookup_url_kwarg = "uuid"
  8. class ArtistViewSet(BaseAPIViewSet):
  9. queryset = Artist.objects.all()
  10. serializer_class = ArtistSerializer
  11. filter_class = ArtistFilter
  12. class AlbumViewSet(BaseAPIViewSet):
  13. queryset = Album.objects.all()
  14. serializer_class = AlbumSerializer
  15. filter_class = AlbumFilter
  16. def get_queryset(self):
  17. queryset = super().get_queryset()
  18. return queryset.select_related("artist").prefetch_related("tracks")
  19. class TrackViewSet(BaseAPIViewSet):
  20. queryset = Track.objects.all()
  21. serializer_class = TrackSerializer
  22. filter_class = TrackFilter
  23. def get_queryset(self):
  24. queryset = super().get_queryset()
  25. return queryset.select_related("album", "album__artist")