X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/27540194355a3118d8330262b6312b3f280f7b9a..774d79294bdeab0d9d841b9775f696cdbb334c4d:/src/catalogue/api/views.py diff --git a/src/catalogue/api/views.py b/src/catalogue/api/views.py index b55b21451..dac1968ad 100644 --- a/src/catalogue/api/views.py +++ b/src/catalogue/api/views.py @@ -9,6 +9,8 @@ from django.core.files.base import ContentFile from django.http import Http404, HttpResponse from django.utils.decorators import method_decorator from django.views.decorators.cache import never_cache +from django_filters import rest_framework as dfilters +from rest_framework import filters from rest_framework.generics import (ListAPIView, RetrieveAPIView, RetrieveUpdateAPIView, get_object_or_404) from rest_framework.permissions import DjangoModelPermissionsOrAnonReadOnly @@ -183,10 +185,32 @@ class BookList(LegacyListAPIView): return Response({}, status=status.HTTP_201_CREATED) +class BookFilter(dfilters.FilterSet): + sort = dfilters.OrderingFilter( + fields=( + ('sort_key_author', 'alpha'), + ('popularity', 'popularity'), + ) + ) + tag = dfilters.ModelMultipleChoiceFilter( + field_name='tag_relations__tag', + queryset=Tag.objects.filter(category__in=('author', 'epoch', 'genre', 'kind')), + conjoined=True, + ) + + class BookList2(ListAPIView): permission_classes = [DjangoModelPermissionsOrAnonReadOnly] queryset = Book.objects.none() # Required for DjangoModelPermissions serializer_class = serializers.BookSerializer2 + filter_backends = ( + dfilters.DjangoFilterBackend, + filters.SearchFilter, + ) + filterset_class = BookFilter + search_fields = [ + 'title', + ] def get_queryset(self): books = Book.objects.all()