"""Product app views.""" from rest_framework import generics, permissions from django.shortcuts import get_object_or_404 from product.models import Product from product import serializers from product import filters class ProductBaseView(generics.GenericAPIView): """Product base view""" def get_queryset(self): """Override get_queryset method.""" return Product.objects.with_base_related() class ProductListView(ProductBaseView, generics.ListAPIView): """List view for model Product.""" permission_classes = (permissions.AllowAny, ) serializer_class = serializers.ProductBaseSerializer filter_class = filters.ProductFilterSet class CreateFavoriteProductView(generics.CreateAPIView, generics.DestroyAPIView): """View for create/destroy product in favorites.""" serializer_class = serializers.ProductFavoritesCreateSerializer lookup_field = 'slug' def get_object(self): """ Returns the object the view is displaying. """ product = get_object_or_404(Product, slug=self.kwargs['slug']) favorites = get_object_or_404(product.favorites.filter(user=self.request.user)) # May raise a permission denied self.check_object_permissions(self.request, favorites) return favorites