I can not save the image in this ImageField.
when sending data back:
{     "image": ["No file was submitted. Check the encoding type on the form."] }   model.py
class MyPhoto(models.Model):     owner = models.ForeignKey('auth.User', related_name='image')     image = models.ImageField(upload_to='photos', max_length=254)   serializers.py
class PhotoSerializer(serializers.HyperlinkedModelSerializer):     class Meta:         model = MyPhoto         fields = ('url', 'id', 'image', 'owner')         owner = serializers.Field(source='owner.username')   view.py
class PhotoList(APIView):     permission_classes = (permissions.IsAuthenticatedOrReadOnly, IsOwnerOrReadOnly)      def get(self, request, format=None):         photo = MyPhoto.objects.all()         serializer = PhotoSerializer(photo, many=True)         return Response(data=serializer.data, status=status.HTTP_200_OK)      def post(self, request, format=None):        serializer = PhotoSerializer(data=request.DATA)        if serializer.is_valid():            serializer.save()            return Response(serializer.data, status=status.HTTP_201_CREATED)        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)      def pre_save(self, obj):         obj.owner = self.request.user   class PhotoDetail(APIView):      permission_classes = (permissions.IsAuthenticatedOrReadOnly, IsOwnerOrReadOnly)      def get_object(self, pk):         try:             return MyPhoto.objects.get(pk=pk)         except MyPhoto.DoesNotExist:             raise Http404      def get(self, request, pk, format=None):         photo = self.get_object(pk)         serializer = PhotoSerializer(photo)         return Response(serializer.data)      def put(self, request, pk, format=None):         photo = self.get_object(pk)         serializer = PhotoSerializer(photo, data=request.DATA)         if serializer.is_valid():             serializer.save()             return Response(serializer.data)         return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)      def delete(self, request, pk, format=None):         photo = self.get_object(pk)         photo.delete()         return Response(status=status.HTTP_204_NO_CONTENT)      def pre_save(self, obj):         obj.owner = self.request.user   url.py
urlpatterns = patterns('',     url(r'^$', 'main.views.main_page'),     url(r'^api/photo/$', views.PhotoList.as_view(), name='myphoto-list'),     url(r'^api/photo/(?P<pk>[0-9]+)/$', views.PhotoDetail.as_view(), name='myphoto-detail'),)   curl
curl -X POST -S \   -H 'Content-Type: application/json' \   -u "michael:bush_pass" \   --data-binary '{"owner":"/users/1/", \     "image":"/Users/test/Downloads/1383310998_05.jpg"}' \   127.0.0.1:8000/api/photo/ 
                Any 'read_only' fields that are incorrectly included in the serializer input will be ignored. Set this to True to ensure that the field is used when serializing a representation, but is not used when creating or updating an instance during deserialization.
I think you can use request.data instead after django rest framework 3.0. The usage of request.DATA and request.FILES is now pending deprecation in favor of a single request.data attribute that contains all the parsed data.
You can check it from here
You seem to be missing the request.FILES argument to the serializer constructor in the your post and put handlers.
serializer = PhotoSerializer(data=request.DATA, files=request.FILES) 
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With