首页 > 解决方案 > DRF -django rest framework APi 多文件上传通过API

问题描述

我正在尝试将多张图片上传到一个帖子,目前我只能上传一张图片并通过 API 获得确认。我怎样才能使它多上传?

我的模型.py

from django.db import models

# Create your models here.


class UploadedImage(models.Model):
   img = models.ImageField('Uploaded Image', upload_to='images') # stores uploaded image
   dt_created = models.DateTimeField(auto_now_add=True, verbose_name='Created')

我的序列化程序.py

from rest_framework import serializers
from .models import UploadedImage


class UploadedImageSerializer(serializers.ModelSerializer):
 class Meta:
    model = UploadedImage
    fields = ('pk', 'img', 'dt_created')

我的视图集.py

from django.shortcuts import render
from rest_framework import viewsets
from imageUpload.serializers import UploadedImageSerializer
from imageUpload.models import UploadedImage


# Create your views here.

class UploadImageViewset(viewsets.ModelViewSet):
   queryset = UploadedImage.objects.all()
   serializer_class = UploadedImageSerializer

标签: djangodjango-rest-frameworkdjango-rest-viewsets

解决方案


你可以这样做

我的模型.py

from django.db import models

# Create your models here.


class UploadedImage(models.Model):
   img = models.ImageField('Uploaded Image', upload_to='images') # stores uploaded image
   dt_created = models.DateTimeField(auto_now_add=True, verbose_name='Created')
my serializers.py

from rest_framework import serializers
from .models import UploadedImage

class UploadImagesSerializer(serializers.Serializer):
    # here we limit how maximum the image is
    img = serializers.ImageField()
    img1 = serializers.ImageField(required=False)
    img2 = serializers.ImageField(required=False)
    
    def create(self, validated_data):
        create = YourModel(img=validated_data.get("img"))
        create.save()
        if validated_data.get("img1"):
            create = YourModel(img=validated_data.get("img1"))
            create.save()
        ....
        return create

class UploadedImageSerializer(serializers.ModelSerializer):
 class Meta:
    model = UploadedImage
    fields = ('pk', 'img', 'dt_created')

我的视图集.py

from django.shortcuts import render
from rest_framework import viewsets
from imageUpload.serializers import UploadedImageSerializer, UploadImagesSerializer
from imageUpload.models import UploadedImage
from rest_framework import parsers

# Create your views here.

class UploadImageViewset(viewsets.ModelViewSet):
   queryset = UploadedImage.objects.all()
   serializer_class = UploadedImageSerializer
   parser_class = [parsers.JSONParser, parsers.MultiPartParser,]
    
   def create(self, request):
       serializer = UploadImagesSerializer(data=request.data)
       if serializer.is_valid():
            serializer.save()
            return Response(...)
       return Response(...)

推荐阅读