首页 > 解决方案 > 如何在视图中使用 django rest 框架 CreateAPI 上传多个图像并在序列化程序中创建方法

问题描述

我有一个 post 序列化器和一个 postimage 序列化器来将多个图像上传到一个帖子。我有这个序列化程序,但我不知道如何以某种方式制作它,以便我可以上传多张图片,例如 5 张图片和一个帖子,就像我们如何使用表单集一样,因为现在我只能上传 1 张图片'images'场地。

这些是序列化程序。请看看,让我知道我必须做出哪些改变......

谢谢

class PostImageSerializer(serializers.ModelSerializer):
    class Meta:
        model = PostImage
        fields = ['id', 'images',]

class PostSerializer(TaggitSerializer, serializers.ModelSerializer):
    user = serializers.ReadOnlyField(source='user.username')
    post_date = serializers.ReadOnlyField()
    postimage_set = PostImageSerializer(many=True)
    likes = UserSerializer(many=True)
    class Meta:
        model = Post
        fields = ['id','title', 'post_date', 'updated', 'user', 'image', 'postimage_set']

    def create(self,validated_data):
        user = self.context['request'].user
        title = validated_data['title']
        image = self.context['request'].FILES.get('image')
        images = self.context['request'].FILES.get('images')

        m1 = Post(user=user,title=title,image=image,)
        m1.save()
        m2 = PostImage(post=m1, images= images)
        m2.save()
        validated_data['images']=m2.images
        validated_data['image']=m1.image
        return validated_data

意见

class CreatePostAPIView(generics.CreateAPIView):
    serializer_class = PostCreateSerializer
    permission_classes = [IsAuthenticated]

    def create(self, request, *args, **kwargs):
        serializer = PostCreateSerializer(data=request.data, context={'request':request,})
        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)

标签: djangodjango-modelsdjango-rest-frameworkdjango-views

解决方案


这解决了问题

def create(self, validated_date):
    images = self.context['request'].FILES.getlist('images')

    for image in list(images):
        m2 = PostImage(post=m1, images= image)
        m2.save()

推荐阅读