Reputation: 195
How can make an endpoint for adding product into a cart using django rest framework? I have searched everywhere and couldn't find. Could you help me please?
This is my products.views:
class ProductDetail(generics.RetrieveAPIView):
queryset = Product.objects.all()
serializer_class = ProductSerializer
class AddProduct(ProductDetail, ListCreateApiView):
serializer_class = AddToCartSerializer
@require_POST
def get(self, request):
cart_obj = Cart.objects.get_or_new(request)
product_id = request.POST.get('product_id')
qs = Product.objects.filter(id=product_id)
if qs.count() == 1:
product_obj = qs.first()
if product_obj not in cart_obj.products.all():
cart_obj.products.add(product_obj)
else:
cart_obj.products.remove(product_obj)
request.session['cart_items'] = cart_obj.products.count()
return Response(status=status.HTTP_200_OK, data={'message': 'Product has been added to cart'})
serializers.py
class ProductSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Product
fields = ('url', 'id', 'title', 'description',
'category', 'price', 'quantity',
'in_stock', 'color')
class AddToCartSerializer(serializers.ModelSerializer):
class Meta:
model = Product
fields = ('id',)
Upvotes: 1
Views: 2109
Reputation: 195
I wrote this function and it works. But I can't control the number of products to add into the cart
class ProductDetail(generics.RetrieveAPIView):
queryset = Product.objects.all()
serializer_class = ProductSerializer
class AddProduct(ProductDetail, viewsets.ModelViewSet):
@action(detail=True, methods=['post'])
def add_to_cart(self, request, pk):
cart_obj = Cart.objects.get_or_new(request)
product_id = pk
qs = Product.objects.filter(id=product_id)
if qs.count() == 1:
product_obj = qs.first()
if product_obj not in cart_obj.products.all():
cart_obj.products.add(product_obj)
else:
cart_obj.products.remove(product_obj)
request.session['cart_items'] = cart_obj.products.count()
return Response(status=status.HTTP_200_OK, data={'message': 'Product has been added to cart'})
Upvotes: 1