Django REST Framework image upload Django REST Framework image upload django django

Django REST Framework image upload


you can create separate endpoint for uploading images, it would be like that:

class ProductViewSet(BaseViewSet, viewsets.ModelViewSet):    queryset = Product.objects.all()    serializer_class = ProductSerializer    @detail_route(methods=['post'])    def upload_docs(request):        try:            file = request.data['file']        except KeyError:            raise ParseError('Request has no resource file attached')        product = Product.objects.create(image=file, ....)

you can go around that solution

-- update:this's how to upload from postmanenter image description here


I lately start Django and have same problem for upload image.

All steps that i done

  1. Install Pillow for using ImageField

    pip install Pillow
  2. In Settings.py add these lines

    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')MEDIA_URL = '/media/' # 'http://myhost:port/media/'
  3. Use ImageField in model.py (create nameFile function for create folder and name of file)

    def nameFile(instance, filename):    return '/'.join(['images', str(instance.name), filename])class UploadImageTest(models.Model):    name = models.CharField(max_length=100)    image = models.ImageField(upload_to=nameFile, blank=True, null=True)
  4. serializer.py

    class ImageSerializer(serializers.ModelSerializer):    class Meta:        model = UploadImageTest        fields = ('name', 'image')
  5. views.py

    class ImageViewSet(ListAPIView):    queryset = UploadImageTest.objects.all()    serializer_class = ImageSerializer    def post(self, request, *args, **kwargs):        file = request.data['file']        image = UploadImageTest.objects.create(image=file)        return HttpResponse(json.dumps({'message': "Uploaded"}), status=200)
  6. urls.py: add this line

    path('upload/', views.ImageViewSet.as_view(), name='upload'),
  7. admin.py: add this line (for check in admin)

    admin.site.register(UploadImageTest)
  8. in terminal

    python manage.py makemigrationspython manage.py migrate


models.py

from django.db import modelsclass imageupload(models.Model):title = models.CharField(max_length=50)images = models.ImageField('images')

serializers.py

from rest_framework import serializersfrom .models import imageuploadclass imageuploadSerializer(serializers.HyperlinkedModelSerializer):class Meta:    model = imageupload    fields= (        'title',        'images'    )

views.py

from rest_framework import viewsetsfrom .models import imageuploadfrom .serializers import imageuploadSerializerclass Imageuploadviewset(viewsets.ModelViewSet):   queryset = imageupload.objects.all()   serializer_class = imageuploadSerializer

urls.py

from django.urls import path, includefrom rest_framework.routers import DefaultRouterfrom . import viewsrouter = DefaultRouter()router.register(r'imageupload', views.Imageuploadviewset)urlpatterns = [    path('imageupload', include(router.urls)),]