More data in catalogue
[redakcja.git] / src / catalogue / views.py
index 792ea70..6d4a224 100644 (file)
@@ -2,9 +2,13 @@
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
 from django.db.models import Prefetch
+from django.contrib.auth.models import User
 from django.views.generic import DetailView, TemplateView
 from . import models
 import documents.models
+from rest_framework.generics import ListAPIView
+from rest_framework.filters import SearchFilter
+from rest_framework import serializers
 
 
 class CatalogueView(TemplateView):
@@ -33,3 +37,52 @@ class AuthorView(TemplateView):
 
 class BookView(DetailView):
     model = models.Book
+
+
+class TermSearchFilter(SearchFilter):
+    search_param = 'term'
+
+
+class Terms(ListAPIView):
+    filter_backends = [TermSearchFilter]
+    search_fields = ['name']
+
+    class serializer_class(serializers.Serializer):
+        label = serializers.CharField(source='name')
+
+
+class EpochTerms(Terms):
+    queryset = models.Epoch.objects.all()
+class KindTerms(Terms):
+    queryset = models.Kind.objects.all()
+class GenreTerms(Terms):
+    queryset = models.Genre.objects.all()
+
+class AuthorTerms(Terms):
+    search_fields = ['first_name', 'last_name']
+    queryset = models.Author.objects.all()
+
+class EditorTerms(Terms):
+    search_fields = ['first_name', 'last_name', 'username']
+    queryset = User.objects.all()
+
+    class serializer_class(serializers.Serializer):
+        label = serializers.SerializerMethodField()
+
+        def get_label(self, obj):
+            return f'{obj.last_name}, {obj.first_name}'
+    
+class BookTitleTerms(Terms):
+    queryset = models.Book.objects.all()
+    search_fields = ['title', 'slug']
+
+    class serializer_class(serializers.Serializer):
+        label = serializers.CharField(source='title')
+
+class WLURITerms(Terms):
+    queryset = models.Book.objects.all()
+    search_fields = ['title', 'slug']
+    
+    class serializer_class(serializers.Serializer):
+        label = serializers.CharField(source='wluri')
+