Невозможно добавить товары в корзину
Я использую django и react для создания простой системы оформления заказа, и мне нужна помощь, чтобы исправить эту ошибку. Я не уверен, что моя функция для события onclick является точной в приведенной ниже программе. Мне очень трудно понять, почему я не могу добавить товар в корзину, нажав на кнопку корзины с помощью события onClick
. Ошибка, которую я получаю на js консоли в браузере: page not found, and the url on the console is pointing to the actual url containing the id of the element I'm trying to add. Whenever I click on the add to cart button that
404 page not found` ошибка появляется как в js консоли в браузере, так и на сервере django в терминале.
The react component
const ProductDetails = (props) => {
const [product, setProduct] = useState({});
useEffect(() => {
const id = props.match.params.id;
const fetchData = async () => {
try {
const res = await axios.get(`${ProductDetailURL}/product/${id}`);
setProduct(res.data);
console.log(res.data)
}
catch (err) {
}
};
fetchData();
}, [props.match.params.id]);
const handleAddToCartURL = (id) =>{
const fetchData = async () => {
try {
const res = await axios.post(`${AddToCartURL}/add-to-cart/${id}`);
setProduct(res.data);
console.log(res.data)
}
catch (err) {
}
};
fetchData();
}
return(
<Box sx={{ flexGrow: 1 }} m={4}>
<Grid container spacing={3}>
<Grid item xs={9}>
<Item>
<img src={product.image} alt="" />
<div>
<p>{product.description}</p>
<p>{product.label}</p>
<p>{product.price}</p>
</div>
<button color='primary' onClick={() => handleAddToCartURL(product.id)}>
<AddShoppingCartIcon />
</button>
</Item>
</Grid>
<Grid item xs>
<Item>Similar Products</Item>
</Grid>
</Grid>
</Box>
)
}
export default ProductDetails
А программа Django для добавления в корзину выглядит следующим образом:
class add_to_cart_view(APIView):
def post(self, request, *args, **kwargs):
id = request.data.get('id', None)
if id is None:
return Response({"message": "Invalid request. Ensure ypu have added added products to the cart"}, status=HTTP_400_BAD_REQUEST)
product = get_object_or_404(Product, id=id)
order_product_qs = product.objects.get_or_create(
product=product,
user=request.user,
ordered=False
)
if order_product_qs.exists():
order_product = order_product_qs.first()
order_product.quantity += 1
order_product.save()
else:
order_product = product.objects.create(
product=product,
user=request.user,
ordered=False
)
order_qs = Order.objects.filter(user=request.user, ordered=False)
if order_qs.exists():
order = order_qs[0]
if not order.products.filter(product__id=order_product_qs.id).exists():
order.products.add(order_product)
return Response(status=HTTP_200_OK)
else:
ordered_date = timezone.now()
order = Order.objects.create(user=request.user, ordered_date=ordered_date)
order.products.add(order_product)
return Response(status=HTTP_200_OK)
Спасибо за обновление. Для отправки параметров запроса в add_to_cart нужно использовать вопросительный знак вместо слэша:
`${AddToCartURL}/add-to-cart?${id}`
Вы можете получить доступ к параметрам внутри add_to_cart_view, используя:
request.query_params
DRF рекомендует использовать это вместо djangos request.GET (https://www.django-rest-framework.org/api-guide/requests/#query_params)