Partners
[wolnelektury.git] / src / partners / api / views.py
1 from django.utils.decorators import method_decorator
2 from django.views.decorators.cache import never_cache
3 from rest_framework.generics import (ListAPIView, get_object_or_404)
4 from rest_framework import serializers
5 from api.fields import AbsoluteURLField
6 from catalogue.models import Book
7 from partners import models
8
9
10
11
12 class PartnerBookSerializer(serializers.ModelSerializer):
13     url = AbsoluteURLField(view_name='catalogue_api_book', view_args=['slug'])
14     price = serializers.SerializerMethodField()
15
16     class Meta:
17         model = Book
18         fields = ['url', 'epub_url', 'price']
19
20     def get_price(self, obj):
21         if obj.pages is None:
22             return None
23         return self.context['partner'].get_price(obj.pages)
24
25
26 @method_decorator(never_cache, name='dispatch')
27 class PartnerBooksView(ListAPIView):
28     serializer_class = PartnerBookSerializer
29
30     def get_serializer_context(self):
31         ctx = super().get_serializer_context()
32         ctx['partner'] = get_object_or_404(models.Partner, key=self.kwargs['key'])
33         return ctx
34
35     def get_queryset(self):
36         return Book.objects.filter(parent=None).filter(can_sell=True).exclude(pages=None)