gault-millau/apps/collection/views/common.py

78 lines
2.6 KiB
Python

from rest_framework import generics
from rest_framework import permissions
from collection import models
from utils.pagination import ProjectPageNumberPagination
from django.shortcuts import get_object_or_404
from establishment.serializers import EstablishmentListSerializer
from collection.serializers import common as serializers
# Mixins
class CollectionViewMixin(generics.GenericAPIView):
"""Mixin for Collection view"""
model = models.Collection
queryset = models.Collection.objects.all()
class GuideViewMixin(generics.GenericAPIView):
"""Mixin for Guide view"""
model = models.Guide
queryset = models.Guide.objects.all()
# Views
# Collections
class CollectionListView(CollectionViewMixin, generics.ListAPIView):
"""List Collection view"""
permission_classes = (permissions.AllowAny,)
serializer_class = serializers.CollectionSerializer
def get_queryset(self):
"""Override get_queryset method"""
return models.Collection.objects.published()\
.by_country_code(code=self.request.country_code)\
.order_by('-on_top', '-created')
class CollectionEstablishmentListView(CollectionListView):
"""Retrieve list of establishment for collection."""
permission_classes = (permissions.AllowAny,)
pagination_class = ProjectPageNumberPagination
serializer_class = EstablishmentListSerializer
def get_queryset(self):
"""
Override get_queryset method.
"""
queryset = super(CollectionEstablishmentListView, self).get_queryset()
# Perform the lookup filtering.
lookup_url_kwarg = self.lookup_url_kwarg or self.lookup_field
assert lookup_url_kwarg in self.kwargs, (
'Expected view %s to be called with a URL keyword argument '
'named "%s". Fix your URL conf, or set the `.lookup_field` '
'attribute on the view correctly.' %
(self.__class__.__name__, lookup_url_kwarg)
)
collection = get_object_or_404(queryset, pk=self.kwargs['pk'])
# May raise a permission denied
self.check_object_permissions(self.request, collection)
return collection.establishments.all()
# Guide
class GuideListView(GuideViewMixin, generics.ListAPIView):
"""List Guide view"""
permission_classes = (permissions.AllowAny,)
serializer_class = serializers.GuideSerializer
class GuideRetrieveView(GuideViewMixin, generics.RetrieveAPIView):
"""Retrieve Guide view"""
permission_classes = (permissions.AllowAny,)
serializer_class = serializers.GuideSerializer