首页 > 解决方案 > 序列化程序无法从 React 正确读取 POST 数据到 Django Rest 框架

问题描述

将 Post 数据从 React 前端发送到 Django rest 框架。但似乎序列化程序只读取第一个元素。如何提取所有信息?

模型.py

class Company(models.Model):
    name = models.CharField(max_length=30, blank= False, null=False, unique=True)
    established = models.IntegerField()
    origin = models.CharField(max_length=64, null=False, blank=False)

序列化程序.py

from rest_framework import serializers
from .models import Company,Brand

class CompanySerializer(serializers.ModelSerializer):
    class Meta:
        model = Company
        fields = ['id', 'name', 'established', 'origin']

class AddCompanySerializer(serializers.ModelSerializer):
    class Meta:
        model = Company
        fields = ['name', 'established', 'origin']
        extra_kwargs = {'name':{'required':False},'established':{'required':False},'origin':{'required':False}}

React Frontend(发送带有数据的 post 请求)

handleOnSubmit = (event)=>{
        const requestOptions = {
            method : "POST",
            headers : {"Content-Type":"application/json"},
            body : JSON.stringify({
                name:this.state.name,
                est:this.state.est,
                org:this.state.org
            }),
        };
        fetch("api/add-company", requestOptions).then((response)=>{return response.json()}).then((data)=>{
            console.log(data)
        })
        event.preventDefault();
    }

休息框架功能

@api_view(['POST'])
def add_company(request):
    serializer = AddCompanySerializer(data=request.data)
    if serializer.is_valid():
        print(serializer.data.get('name'))
        print(serializer.data.get('est'))
        print(serializer.data)
        print(serializer)
        return Response(serializer.data, status=status.HTTP_200_OK)
    print(serializer.errors)
    return Response({"Not working"}, status=status.HTTP_400_BAD_REQUEST)

打印语句的终端输出

雀巢

没有任何

{'名称':'雀巢'}

AddCompanySerializer(data={'name': 'Nestle', 'est': '1866', 'org': 'Switzerland'}): name = CharField(max_length=30, required=False, validators=[<UniqueValidator(queryset =Company.objects.all())>]) 已建立 = IntegerField(required=False) origin = CharField(max_length=64, required=False) [15/Jun/2021 13:52:44] "POST /api/add -公司 HTTP/1.1" 200 17

形式

标签: reactjsdjango-rest-framework

解决方案


推荐阅读