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吗?
答案 0 :(得分:1)
显然,这是DRF中的错误,将在DRF 3.2.0版本中修复。查看这张Github门票。 https://github.com/tomchristie/django-rest-framework/pull/2759
这种情况正在发生,因为未保存的请求中发送的文件对象没有与之关联的.url
属性。