fnp
/
wolnelektury.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
edd562d
)
book filtering
author
Radek Czajka
<rczajka@rczajka.pl>
Tue, 4 Mar 2025 14:31:39 +0000
(15:31 +0100)
committer
Radek Czajka
<rczajka@rczajka.pl>
Tue, 4 Mar 2025 14:31:39 +0000
(15:31 +0100)
requirements/requirements.txt
patch
|
blob
|
history
src/api/pagination.py
patch
|
blob
|
history
src/catalogue/api/views.py
patch
|
blob
|
history
src/wolnelektury/settings/apps.py
patch
|
blob
|
history
diff --git
a/requirements/requirements.txt
b/requirements/requirements.txt
index
898a609
..
10498cb
100644
(file)
--- a/
requirements/requirements.txt
+++ b/
requirements/requirements.txt
@@
-14,6
+14,7
@@
django-modeltranslation==0.18.12
django-allauth==0.51
django-extensions==3.2.3
djangorestframework==3.15.1
django-allauth==0.51
django-extensions==3.2.3
djangorestframework==3.15.1
+django-filter==23.5
djangorestframework-xml==2.0.0
django-admin-ordering==0.18
django-countries==7.6.1
djangorestframework-xml==2.0.0
django-admin-ordering==0.18
django-countries==7.6.1
diff --git
a/src/api/pagination.py
b/src/api/pagination.py
index
0c4ae09
..
0436622
100644
(file)
--- a/
src/api/pagination.py
+++ b/
src/api/pagination.py
@@
-3,6
+3,9
@@
from rest_framework.response import Response
class WLLimitOffsetPagination(LimitOffsetPagination):
class WLLimitOffsetPagination(LimitOffsetPagination):
+ def get_results(self, data):
+ return data['member']
+
def get_paginated_response(self, data):
return Response({
"member": data,
def get_paginated_response(self, data):
return Response({
"member": data,
diff --git
a/src/catalogue/api/views.py
b/src/catalogue/api/views.py
index
b55b214
..
5afec17
100644
(file)
--- a/
src/catalogue/api/views.py
+++ b/
src/catalogue/api/views.py
@@
-9,6
+9,7
@@
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.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 rest_framework.generics import (ListAPIView, RetrieveAPIView,
RetrieveUpdateAPIView, get_object_or_404)
from rest_framework.permissions import DjangoModelPermissionsOrAnonReadOnly
from rest_framework.generics import (ListAPIView, RetrieveAPIView,
RetrieveUpdateAPIView, get_object_or_404)
from rest_framework.permissions import DjangoModelPermissionsOrAnonReadOnly
@@
-183,10
+184,26
@@
class BookList(LegacyListAPIView):
return Response({}, status=status.HTTP_201_CREATED)
return Response({}, status=status.HTTP_201_CREATED)
+class BookFilter(filters.FilterSet):
+ sort = filters.OrderingFilter(
+ fields=(
+ ('sort_key_author', 'alpha'),
+ ('popularity', 'popularity'),
+ )
+ )
+ tag = filters.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
class BookList2(ListAPIView):
permission_classes = [DjangoModelPermissionsOrAnonReadOnly]
queryset = Book.objects.none() # Required for DjangoModelPermissions
serializer_class = serializers.BookSerializer2
+ filter_backends = (filters.DjangoFilterBackend,)
+ filterset_class = BookFilter
def get_queryset(self):
books = Book.objects.all()
def get_queryset(self):
books = Book.objects.all()
diff --git
a/src/wolnelektury/settings/apps.py
b/src/wolnelektury/settings/apps.py
index
d4faa8b
..
b9d507e
100644
(file)
--- a/
src/wolnelektury/settings/apps.py
+++ b/
src/wolnelektury/settings/apps.py
@@
-59,6
+59,7
@@
INSTALLED_APPS_CONTRIB = [
'django.contrib.postgres',
'admin_ordering',
'rest_framework',
'django.contrib.postgres',
'admin_ordering',
'rest_framework',
+ 'django_filters',
'fnp_django_pagination',
'pipeline',
'sorl.thumbnail',
'fnp_django_pagination',
'pipeline',
'sorl.thumbnail',