You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django REST Framework中上传多张图片(非嵌套序列化器方式)

解决多张图片上传仅成功一张的问题

问题根源

你的ProjectImageViewSet默认的create方法仅能处理单个序列化对象,而上传多张图片时需要批量处理多个ProjectImage实例。


方案1:重写ViewSet的create方法

修改views.py中的ProjectImageViewSet,添加批量处理逻辑:

from rest_framework.response import Response
from rest_framework import status

class ProjectImageViewSet(viewsets.ModelViewSet):
    parser_classes = [MultiPartParser]
    queryset = ProjectImage.objects.all()
    serializer_class = ProjectImageSerializer

    def create(self, request, *args, **kwargs):
        # 获取所有上传的文件
        files = request.FILES.getlist('file')
        project_id = request.data.get('project')
        user = request.user  # 需确保用户已认证,自动关联当前用户

        if not files or not project_id:
            return Response({"error": "缺少图片或项目ID"}, status=status.HTTP_400_BAD_REQUEST)
        
        # 批量创建ProjectImage实例
        project_images = []
        for file in files:
            project_images.append(
                ProjectImage(
                    file=file,
                    user=user,
                    project_id=project_id
                )
            )
        ProjectImage.objects.bulk_create(project_images)
        
        # 返回序列化后的结果
        serializer = self.get_serializer(project_images, many=True)
        return Response(serializer.data, status=status.HTTP_201_CREATED)

方案2:配置Serializer支持批量创建

修改serializers.py,开启批量序列化支持:

class ProjectImageSerializer(ModelSerializer):
    class Meta:
        model = ProjectImage
        fields = ('id', 'file', 'project',)
        extra_kwargs = {'project': {'required': True}}

(该方案需配合方案1的批量创建逻辑使用,或单独配置ViewSet的批量处理参数)


Postman请求注意事项

  • 请求方法:POST
  • 请求头:Content-Type: multipart/form-data
  • 表单参数:
    • file:选择多个文件(Postman中选择文件类型后,可多次添加文件,或勾选"Allow multiple files"选项)
    • project:传入对应项目的ID(数值类型)

额外说明

  • 需确保用户已通过认证(比如给ViewSet添加permission_classes = [IsAuthenticated]),否则request.user会是匿名用户,导致外键关联失败
  • 如果需要对每张图片单独做验证,可以在循环中逐个调用序列化器验证后再创建实例,避免批量创建时部分失败导致全部回滚的问题

内容的提问来源于stack exchange,提问作者Aprotim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 13:01:10