【问题标题】:How to access array of files in request with Django Rest Framework如何使用 Django Rest Framework 访问请求中的文件数组
【发布时间】:2022-02-09 23:14:35
【问题描述】:

我从 React 前端向 Python 后端发送一个请求,在这个请求中,我发送一个带有图像数组的 FormData(),如下所示:

const data = new FormData()
images.forEach(image => {
    data.append('images', image.arquivo)
})
data.append('product', JSON.stringify(product))
return recuperarInstanciaAxios(true).post(`${recuperarUrlBackend()}/products/`, data)

但我无法在 Python 中访问这组图片。 通过 PyCharm 评估,request.FILES 向我显示了一个包含数组“图像”的字典。 但是当我做 request.FILES['images'] 它返回我一个文件。 这是python代码:

def create(self, request):
    try:
        productData = json.loads(request.data['product'])
        serializer = ProductSerializer(data=productData )
        if serializer.is_valid():
            product = serializer.save()
            files = request.FILES['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 :' +
                                         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(exc.__str__(),
                        status.HTTP_412_PRECONDITION_FAILED)

它给了我一个错误,因为文件不可迭代。 我是否以错误的方式访问数组?

【问题讨论】:

  • 你能做一个“类型(文件)”来看看它是如何解释它的吗?
  • FormData()返回什么类型的对象?也许使用.append 正在用"images" key 替换值

标签: python python-3.x django django-rest-framework


【解决方案1】:

我认为问题在于你如何形成变量“文件”应该是这样的:

files = request.FILES.getlist('file_field')

file_field 是您的 html 文件的名称

【讨论】:

  • 就是这样! Dict 和 MultiValueDict 之间是有区别的,而我对此一无所知。谢谢@Pablo!
猜你喜欢
  • 2018-05-19
  • 2018-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-20
  • 1970-01-01
  • 2019-11-22
相关资源
最近更新 更多