book search
authorRadek Czajka <rczajka@rczajka.pl>
Tue, 4 Mar 2025 14:53:59 +0000 (15:53 +0100)
committerRadek Czajka <rczajka@rczajka.pl>
Tue, 4 Mar 2025 14:53:59 +0000 (15:53 +0100)
src/catalogue/api/views.py

index 5afec17..dac1968 100644 (file)
@@ -9,7 +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 filters
+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
@@ -184,14 +185,14 @@ class BookList(LegacyListAPIView):
         return Response({}, status=status.HTTP_201_CREATED)
 
 
-class BookFilter(filters.FilterSet):
-    sort = filters.OrderingFilter(
+class BookFilter(dfilters.FilterSet):
+    sort = dfilters.OrderingFilter(
         fields=(
             ('sort_key_author', 'alpha'),
             ('popularity', 'popularity'),
         )
     )
-    tag = filters.ModelMultipleChoiceFilter(
+    tag = dfilters.ModelMultipleChoiceFilter(
         field_name='tag_relations__tag',
         queryset=Tag.objects.filter(category__in=('author', 'epoch', 'genre', 'kind')),
         conjoined=True,
@@ -202,8 +203,14 @@ class BookList2(ListAPIView):
     permission_classes = [DjangoModelPermissionsOrAnonReadOnly]
     queryset = Book.objects.none()  # Required for DjangoModelPermissions
     serializer_class = serializers.BookSerializer2
-    filter_backends = (filters.DjangoFilterBackend,)
+    filter_backends = (
+        dfilters.DjangoFilterBackend,
+        filters.SearchFilter,
+    )
     filterset_class = BookFilter
+    search_fields = [
+        'title',
+    ]
 
     def get_queryset(self):
         books = Book.objects.all()