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

Django如何通过POST请求正确接收多图上传并适配React Native端

问题1:request.data不可变无法修改的原因与解决方法

DRF的request.data在处理multipart/form-data类型的请求时,默认返回的是不可变QueryDict对象,直接修改就会报错。你不需要修改原始的request.data,只需要先拷贝一份可变副本操作即可,修改后的核心逻辑如下:

class PostView(APIView):
    def post(self, request):
        # 先拷贝得到可变的字典
        data = request.data.copy()
        post_body = data['body']
        hash_tags_list = extract_hashtags(post_body)
        hash_tags = [HashTag.objects.get_or_create(
            hash_tag=ht)[0].hash_tag for ht in hash_tags_list]
        # 操作拷贝后的data
        data['hash_tags'] = hash_tags
        # 把拷贝后的data传给序列化器
        serializer = PostSerializer(data=data)
        if serializer.is_valid():
            try:
                post_obj = serializer.save()
                if 'images' in request.FILES:
                    for img in request.FILES.getlist('images'):
                        Photo.objects.create(post_id=post_obj, image=img)
            except django.db.utils.InternalError as e:
                return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        else:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

你之前测试时直接读取文件字节传入请求的方式是错误的,这种方式不会被DRF识别为上传文件,会被当作普通字节数据存入request.data,自然会触发不可变报错。

问题2:是否可以正常接收React Native端上传的多张图片

只要React Native端按照标准的multipart/form-data格式发送请求,多张图片的字段名统一为images,你的现有逻辑就可以正常接收:

  • 前端上传的图片不管是本地文件封装的FormData数据,还是ByteIO格式,只要符合multipart规范,DRF都会自动解析为UploadedFile对象存入request.FILES
  • 你用request.FILES.getlist('images')获取多图、逐个写入Photo表的逻辑是正确的,ImageField可以直接处理这些上传文件对象,不需要额外做字节转换。

本地测试参考写法

如果要用Python本地测试接口,正确的请求写法如下:

import requests

url = "你的接口地址"
data = {"body": "测试内容 #标签1 #标签2"}
# 多图就追加列表元素,字段名统一为images
files = [
    ("images", open("test1.png", "rb")),
    ("images", open("test2.png", "rb"))
]
response = requests.post(url, data=data, files=files)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:18:01