0

I couldn't upload images using Django Rest-framework through POSTMAN , But I can do the same using Django Admin. When I try to debug the code, It's found that, serializer.is_valid() is always false.

These are my code parts,

views.py

class imageuploadView(APIView):
    def post(self, request,format=None):
        serializer=ImageSerializer(data=request.data)
        print serializer
        if serializer.is_valid():
            serializer.save()
            return  Response(data={"detail":"Image Uploaded !"})#data
        else:
            return Response(data={"detail":"Not Uploaded"})

models.py

class ImageUploadModel(models.Model):
    usr_id=models.IntegerField()
    upImg=models.ImageField(upload_to='media/')
    caption=models.CharField(max_length=50,default=None)

serializer.py

class ImageSerializer(serializers.ModelSerializer):
    upImg = serializers.ImageField(max_length=None,use_url=True)
    class Meta:
        model=ImageUploadModel
        fields=('usr_id','upImg','caption')

settings.py

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
    '/static/',
)

MEDIA_ROOT = os.path.join(BASE_DIR,'media')

MEDIA_URL = '/media/'
REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
}

Here is my Source Code

1 Answers1

0

You can delete additional field in your serializer, models.ImageField will use serializer.ImageField by default.

class ImageSerializer(serializers.ModelSerializer):

    class Meta:
        model=ImageUploadModel
        fields=('usr_id','upImg','caption')

It should just work, your view code is correct
You could also use generics.CreateAPIView to reduce a code.

class imageuploadView(generics.CreateAPIView):

    queryset = ImageUploadModel.objects.all()
    serializer_class = ImageSerializer

If it will not work, please update your answer with a serializer.errors, you can check it in else case

Ivan Semochkin
  • 8,649
  • 3
  • 43
  • 75
  • Tried, but problem remaining there :( –  Dec 29 '16 at 11:41
  • I updated Question with my Source Code, That may useful for you –  Dec 29 '16 at 11:42
  • @JerinPeterGeorge did you tried upload image via browable API which provided by DRF, try it and say how it works with images. And add `serializer.errors` message instead of your sources. Your code looks correct – Ivan Semochkin Dec 29 '16 at 11:47
  • I can see "POST" button provided by DRF but, there is no File browsing button. So I used POSTMAN and I got the response as " {"usr_id":["This field is required."],"upImg":["No file was submitted."]} " –  Dec 29 '16 at 11:54
  • postman-screenshot - https://drive.google.com/file/d/0B0DlE-Qi4Fu6QWwxM1RkaEhnZlk/view –  Dec 29 '16 at 11:57
  • @JerinPeterGeorge try add parsers into your view `parser_classes = (MultiPartParser, FormParser,)` – Ivan Semochkin Dec 29 '16 at 12:29
  • No more change :( –  Dec 29 '16 at 13:18