0

I have react component in were Im posting data in djnago back end, but it always gives me 400 bad request as response and in backend console too.

import axios from 'axios'
import React, { useEffect, useState } from 'react'
import { Button } from 'react-bootstrap'
import API_URL from './BackendDefaustUrls';
import {useNavigate, useParams} from "react-router-dom"

const AddProduct = () => {
    const [Image , setImage] = useState(null)
    const [Name , setName] = useState("")
    const [Price , setPrice] = useState("")
    const [Description , setDescription] = useState("")
    const [Category , setCategory] = useState("")
    const navigate = useNavigate()
    
    const {id} = useParams()
    
    const getProduct = async () => {
        await axios.get(API_URL+`api/${id}/`).then(response => {
            return response.data
        }).then(data => {
            setName(data.name)
            setImage(data.image)
            setPrice(data.price)
            setDescription(data.description)
            setCategory(data.category)
        })

    }

    useEffect(()=>{
        getProduct()
    },[])

    const AddProductInfo = async () =>{


        let formField = new FormData()
        formField.append('name',Name)
        formField.append('price',Price)
        formField.append('description',Description)
        formField.append('category',Category)
        
        if (Image != null) {
        formField.append('image',Image)
        }

        
        await axios({
        method: 'POST',
        url: API_URL + `api/`,
        data:formField
        }).then(response => {
        console.log(response.data);
        navigate("/")
        })

    }

    return (
        <div>
        <div className='container'>
            <div className="w-75 mx-auto shadow p-5">
                <h2 className="text-center mb-4">Add A Student</h2>
                
                <div className='form-group'>
                {/* image */}
                <label>Select Image To Upload</label>
                <input
                    type="file"
                    name="image"
                    className='form-control form-control-lg'
                    onChange={e=>setImage(e.target.files[0])}
                />
                </div>
                {/* !!!!!!!!!!!!!!!!!!!!!!! */}
                <div className='form-group'>
                <input
                    type="text"
                    name="name"
                    className='form-control form-control-lg'
                    placeholder="Enter Product Name"
                    value={Name}
                    onChange={e=>setName(e.target.value)}
                />
                </div>

                <div className='form-group'>
                <input
                    type="text"
                    name="price"
                    className='form-control form-control-lg'
                    placeholder="Price of Product"
                    value={Price}
                    onChange={e=>setPrice(e.target.value)}
                />
                </div>

                <div className='form-group'>
                <textarea
                    type="text"
                    name="description"
                    className='form-control form-control-lg'
                    placeholder="Description"
                    value={Description}
                    onChange={e=>setDescription(e.target.value)}
                />
                </div>

                <div className='form-group'>
                <input
                    type="text"
                    name="category"
                    className='form-control form-control-lg'
                    placeholder="Category"
                    value={Category}
                    onChange={e=>setCategory(e.target.value)}
                />
                </div>
                <Button className='btn btn-success' onClick={AddProductInfo}>Upload</Button>
            </div>
        </div>
        </div>
    )
}

export default AddProduct

and my view.py is

from django.shortcuts import render
from .serializers import ProductsSerializer
from .models import Product
from rest_framework import viewsets
# Create your views here.

class ProductViewSet(viewsets.ModelViewSet):
    queryset = Product.objects.all()
    serializer_class = ProductsSerializer

and Im including a screenshot enter image description here

if I just remove or commit getProduct() function and useEffect(), it posts fine but my main intention of this component is to update info with "PUT" but it was not working too. so I tried with "POST" and it gives me the same error.

I think if I can solve problem with "POST" THEN "PUT" request will be solved

and im sure the main problem is with getProduct().

  • have you added POST as an allowed method in your Django view as a decorator? e.g @require_http_methods(["GET", "POST"]) – Ikram Khan Niazi Dec 10 '22 at 14:02
  • i have only few line of code in my view.py ` from django.shortcuts import render from .serializers import ProductsSerializer from .models import Product from rest_framework import viewsets # Create your views here. class ProductViewSet(viewsets.ModelViewSet): queryset = Product.objects.all() serializer_class = ProductsSerializer ` – Mostofa kamal Khan Dec 10 '22 at 15:32
  • show urls.py and try to find more detailed error message in django error log. also print to console this `API_URL+`api/${id}/`` value or grab the request details from network tab of chrome dev tools and add it to your question. – Ivan Starostin Dec 11 '22 at 08:24
  • my url is right. because it is loading data properly. can you help me in live? – Mostofa kamal Khan Dec 11 '22 at 09:00

0 Answers0