def post(self, request, *args, **kwargs): client = Iamporter(imp_key=imp_key, imp_secret=imp_secret) imp_uid = request.data['imp_uid'] customer_id = request.user.pk payment_info = client.find_payment(imp_uid=imp_uid) queryset = Cart.objects.filter(customer=customer_id).aggregate( total_amount=Sum( Case(When(product__is_discount=True, then=F('product__discount_price') * F('quantity')), default=F('product__price') * F('quantity')))) instance = {'status': 'failed'} if payment_info['amount'] == queryset['total_amount']: with transaction.atomic(): ordered = Order.objects.bulk_create( Cart.objects.filter(customer=customer_id)) Cart.objects.filter(customer=customer_id).delete() for i in ordered: product = Product.objects.get(name=i.product) product.stock -= i.quantity product.save() instance = {'status': 'success'} else: client.cancel_payment(imp_uid=imp_uid, reason="amount mismatch") serializer = self.get_serializer(instance) return Response(serializer.data)