如何在Django Rest Framework中正确获取React前端传来的FormData文件数组
如何在Django Rest Framework中正确获取FormData传递的多文件数组?
你说得没错,问题就出在你访问多文件的方式上。当你通过FormData多次append同一个键名(比如这里的images)时,Django的request.FILES对象并不会自动将这些文件打包成数组——直接用request.FILES['images']只会返回最后一个被append的文件,这也是为什么你尝试循环它时会得到"不可迭代"的错误。
解决方法:使用getlist()方法获取所有文件
要拿到所有上传的图片文件,你需要用request.FILES.getlist('images')来替代直接通过键访问。这个方法会返回对应键名下的所有文件组成的列表,这样你就能正常迭代了。
修改后的后端代码
def create(self, request): try: productData = json.loads(request.data['product']) serializer = ProductSerializer(data=productData) if serializer.is_valid(): product = serializer.save() # 关键修改:用getlist获取所有images文件 files = request.FILES.getlist('images') for image in files: product_image = {'image': image, 'product': product.id} image_serializer = ProductImage(data=product_image) if image_serializer.is_valid(): image_serializer.save() else: raise IntegrityError('Error :' + image_serializer.errors.__str__()) return Response(serializer.data, status=status.HTTP_201_CREATED) else: raise IntegrityError('Error:' + serializer.errors.__str__()) except IntegrityError as exc: print(exc) return Response(str(exc), status=status.HTTP_412_PRECONDITION_FAILED)
额外注意点
- 你的前端代码是正确的:多次调用
data.append('images', image.arquivo)是传递多文件的标准方式,FormData会保留同一个键的所有值。 - 确保你的
ProductImage序列化器中的image字段配置正确,要使用serializers.ImageField()来处理文件上传。
内容的提问来源于stack exchange,提问作者Erick Felix
相关产品推荐
相关产品推荐

