40 lines
1.3 KiB
Python
40 lines
1.3 KiB
Python
"""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
|