X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/21cd47e315b2e86edeff93bac5d1eca5b5d2c428..66f7c2655c3bbc544569b6b5111b50b14cb9336b:/src/catalogue/views.py?ds=sidebyside diff --git a/src/catalogue/views.py b/src/catalogue/views.py index 792ea700..6d4a2249 100644 --- a/src/catalogue/views.py +++ b/src/catalogue/views.py @@ -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') +