上传文件

时间:2015-09-11 15:58:28

标签: python django django-rest-framework

class Image(models.Model):
    file = models.ImageField(upload_to='image/')

class ImageSerializer(serializers.ModelSerializer):
    class Meta:
        model = Image
        fields = ('file', )

class ImageView(APIView):

    permission_classes = (AllowAny,)
    parser_classes = (FileUploadParser, MultiPartParser, )

    def post(self, request):
        image = Image.objects.get(pk=1)
        serializer = ImageSerializer(data=request.data)

        if serializer.is_valid():
            serializer.update(instance=image,validated_data=serializer.data)


            return Response(serializer.data)
        else:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

使用httpie测试功能: http --form POST http://127.0.0.1:8000/image/'file'@testimage/test.jpg

抛出错误: 'InMemoryUploadedFile'对象没有属性'url'

致电

serializer.update(instance=image,validated_data=serializer.data)

我正确使用ModelSerialzier吗?

1 个答案:

答案 0 :(得分:1)

显然,这是DRF中的错误,将在DRF 3.2.0版本中修复。查看这张Github门票。 https://github.com/tomchristie/django-rest-framework/pull/2759

这种情况正在发生,因为未保存的请求中发送的文件对象没有与之关联的.url属性。