Отправка данных из React Js в Django Rest - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь опубликовать данные из реакции js на django rest api, но получаю ошибку http 400 неверного запроса («запрос не может быть обработан сервером из-за неверного синтаксиса.»)

У меня естьЯ попытался провести рефакторинг моего кода, и я не могу найти, в чем проблема. Здесь ниже мой код:

class Postjob extends React.Component{
constructor(props){
    super(props);
    this.submitForm=this.submitForm.bind(this);
    this.postedjob=this.postedjob.bind(this);
    this.state={
        Company:0,
        job_title:"",
        job_description:"",
        salary:0,
        job_status:false,
    }
}

submitForm= (evt) =>{
    evt.preventDefault()
    console.log(this.state.Company)
    const form={
        Company: this.state.Company,
        job_title: this.state.job_title,
        job_description: this.state.job_description,
        salary: this.state.salary,
        job_status: this.state.job_status
    };

    this.postedjob(form)

};

postedjob = (payload)=>{


    fetch(`http://127.0.0.1:8000/job/create_job/`,
        {
            method: 'POST',
            body: JSON.stringify(payload),
            headers: {
                'Content-Type': 'application/json'
            }
        }
    ).then(response => response.json())
};

render() {
    return(
        <div>
            <h1>{this.state.currenttask}</h1>
            <form onSubmit={this.submitForm}>

                <input type='number' value={this.state.Company} onChange={e=>this.setState({Company:e.target.value})}/>

              <input type='text' value={this.state.job_title} onChange={e=>this.setState({job_title:e.target.value})}/>


                <input type='text' value={this.state.job_description} onChange={e=>this.setState({job_description:e.target.value})}/>

                <input type='number' value={this.state.salary} onChange={e=>this.setState({salary:e.target.value})}/>

                <button type="submit">Submit</button>

          </form>

        </div>
    )
}

}

Django Side:

Views.py:

lass Companylist(APIView):

 def get(self,request):
   return Response([CompanySerializer(company).data for company in Company.objects.all()])

  def post(self,request):
   payload=request.data
   serializer=CompanySerializer(data=payload)

   if serializer.is_valid():
       serializer.save()
       return Response(serializer.data,status=status.HTTP_201_CREATED)
   return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST)

Serializers.py:

class CompanySerializer(serializers.ModelSerializer):

class Meta:
    model=Company
    fields='__all__' #to get all fields

def create(self, validated_data):
    company = Company.objects.all(**validated_data)
    return company

def update(self, instance, validated_data):
    for k, v in validated_data.items():
        setattr(instance, k, v)
        instance.save()
    return instance

def validate(self, attrs):
    if not attrs.get('company_name') or attrs.get('company_name') < 10:
        raise ValidationError("Book is too small to read")
    return attrs

Я пробовал публиковать из django api, и это успешно, но когда я пытаюсь из формы реагировать js, это дает мне ошибку, и яне могу найти причину.Буду очень благодарен, если кто-то сможет найти причину ошибки.

1 Ответ

0 голосов
/ 14 февраля 2019

Это было бы из-за неправильных типов при сериализации полезной нагрузки в json.Ты уверен во всем?Поле компании начинается с заглавной буквы на сервере?Это должен быть номер?Если это так, вы должны знать о типе значений состояния при строковой нагрузке.

Например, значение, указанное в event.target.value в onChange, будет иметь тип string , даже если тип ввода - число

Youтакже хотел бы взглянуть на этот CodeSandbox , который я создал.

...