e68c4a2803a0c7d54948e29795c089b23f9ad591
[redakcja.git] / src / catalogue / views.py
1 # This file is part of FNP-Redakcja, licensed under GNU Affero GPLv3 or later.
2 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
3 #
4 from django.db.models import Prefetch
5 from django.views.generic import DetailView, TemplateView
6 from . import models
7 import documents.models
8 from rest_framework.generics import ListAPIView
9 from rest_framework.filters import SearchFilter
10 from rest_framework import serializers
11
12
13 class CatalogueView(TemplateView):
14     template_name = "catalogue/catalogue.html"
15
16     def get_context_data(self):
17         ctx = super().get_context_data()
18         ctx["authors"] = models.Author.objects.all().prefetch_related('book_set__book_set', 'translated_book_set__book_set')
19
20         return ctx
21
22
23 class AuthorView(TemplateView):
24     model = models.Author
25     template_name = "catalogue/author_detail.html"
26
27     def get_context_data(self, slug):
28         ctx = super().get_context_data()
29         authors = models.Author.objects.filter(slug=slug).prefetch_related(
30             Prefetch("book_set"),
31             Prefetch("translated_book_set"),
32         )
33         ctx["author"] = authors.first()
34         return ctx
35
36
37 class BookView(DetailView):
38     model = models.Book
39
40
41 class TermSearchFilter(SearchFilter):
42     search_param = 'term'
43
44
45 class Terms(ListAPIView):
46     filter_backends = [TermSearchFilter]
47     search_fields = ['name']
48
49     class serializer_class(serializers.Serializer):
50         label = serializers.CharField(source='name')
51
52
53 class EpochTerms(Terms):
54     queryset = models.Epoch.objects.all()
55 class KindTerms(Terms):
56     queryset = models.Kind.objects.all()
57 class GenreTerms(Terms):
58     queryset = models.Genre.objects.all()