首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django rest框架serializer.errors输出[“此字段是必需的。”]使用multipart/form-data post请求

Django rest框架serializer.errors输出[“此字段是必需的。”]使用multipart/form-data post请求
EN

Stack Overflow用户
提问于 2018-05-29 05:57:20
回答 1查看 2.8K关注 0票数 1

我已经关注这个问题有一段时间了,我发送了一个带有multipart/form-data的post请求,但是得到了错误"This field is required“。对于我应该用请求填充的每个字段。

以下是序列化程序:

代码语言:javascript
运行
复制
class InvoiceUploadSerializer(serializers.Serializer):
    serial=serializers.CharField(max_length=256, required=True)
    amount=serializers.CharField(max_length=256, required=True)
    debtor=serializers.CharField(max_length=256, required=True)
    dateout=serializers.CharField(max_length=256, required=True)
    expiration=serializers.CharField(max_length=256, required=True)
    invoicefile=serializers.FileField()

    class Meta:
        fields=('serial', 'amount', 'debtor', 'dateout', 'expiration', 'invoicefile',)

和视图:

代码语言:javascript
运行
复制
class InvoiceViewSet(viewsets.ModelViewSet):
    queryset=Invoices.objects.all()
    serializer_class=InvoiceSerializer
    parser_classes=(MultiPartParser, FormParser)

    def get_permissions(self):
        if self.request.method in permissions.SAFE_METHODS:
            return (permissions.AllowAny(),)

        if self.request.method == 'POST':
            return (permissions.IsAuthenticated(),)

        return (permissions.IsAuthenticated(), IsAccountOwner(),)

    def create(self, request):
        serializer=InvoiceUploadSerializer(data=request.data)
        if serializer.is_valid():
            ... handle serializer

            return Response(serializer.validated_data, status=status.HTTP_201_CREATED)
        else:
            emessage=serializer.errors
            return Response({
                'status': 'Bad request',
                'message': emessage,
            }, status=status.HTTP_400_BAD_REQUEST

以下图片显示了带有传出请求的浏览器控制台:

最后是来自浏览器控制台的错误消息:

我不明白为什么它会告诉我所有的字段都丢失了,标题设置正确,而且在我看来还不错。

切换视图代码和urls仍然是相同的错误,新的具有相同的问题:

代码语言:javascript
运行
复制
class InvoiceUploadView(APIView):
    parser_classes=(MultiPartParser, FormParser)
    def get_permissions(self):
        return (permissions.AllowAny(),)

    def post(self, request):
        serializer=InvoiceUploadSerializer(data=request.POST)
        if serializer.is_valid():
            return Response(serializer.validated_data, status=status.HTTP_201_CREATED)
        else:
            emessage=serializer.errors
            return Response({
                'status': 'Bad request',
                'message': emessage,
            }, status=status.HTTP_400_BAD_REQUEST)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-31 18:14:00

您的POST请求的Content-Type标头中缺少multipart boundary。否则,应用程序可能无法解析请求负载,并且验证将失败,因为数据将丢失。

浏览器通常会为您设置Content-Type标头和边界。也许您正在覆盖它,并自己在某个地方设置Content-Type头?如果是,请取消设置,然后尝试发出另一个请求。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50573822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档