【问题标题】:Django Rest Framework - normal PUT json data returns FIleUpload parse errorDjango Rest Framework - 正常 PUT json 数据返回 FIleUpload 解析错误
【发布时间】:2017-07-15 05:28:24
【问题描述】:

由于某种原因,我在尝试使用 jquery 对我的 REST API 进行 PUT 调用时收到以下错误。

{"detail":"FileUpload parse error - none of upload handlers can handle the stream"}

这是视图:

class GateView(APIView):
    def get_object(self, pk):
        try:
            return Gate.objects.get(pk=pk)
        except Gate.DoesNotExist:
            raise Http404
    def get(self, request, coords, format=None):
        results = []
        try:
            pa_distances = []
            for pa in Gate.objects.all():
                point = Point(float(coords.split(',')[0]),float(coords.split(',')[1]))
                polygon = shape(pa.polygone['features'][0]['geometry'])
                if polygon.contains(point):
                    results = [pa]
                    break

        except Exception, e:
            print e
            pass
        serializer = GateSerializer(results, many=True)
        return JSONResponse(serializer.data)

    def put(self, request, coords, format=None):
        gate = self.get_object(coords)
        print gate
        serializer = GateSerializer(gate, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

jQuery:

$.ajax({
    url: '/protected-area/' + type + '/' + pk + '/',    //Your api url
    type: 'PUT',   //type is any HTTP method
    data: {name: feature.getProperties().name},      //Data as js object
    success:function(){
    }
});

序列化器:

class GateSerializer(serializers.ModelSerializer):
    protected_area = serializers.ReadOnlyField(source='protected_area.name')
    class Meta:
        model = Gate
        fields = ('protected_area', 'name')

【问题讨论】:

    标签: jquery django django-rest-framework


    【解决方案1】:
    def put(self, request, coords, format=None):
            gate = self.get_object(coords)
            print gate
            serializer = GateSerializer(instance=gate, data=request.data, partial=True)
            if serializer.is_valid():
                serializer.save()
                return Response(serializer.data)
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-16
      • 1970-01-01
      • 2019-04-14
      • 2019-08-19
      • 1970-01-01
      • 2016-05-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多