如何使用django rest框架解析多部分表单数据中的多个文件?

时间:2018-05-24 09:14:55

标签: python django django-rest-framework multipartform-data

我收到一个包含几个文件的数组。我的request.data看起来像这样:

<QueryDict: {'image': [<TemporaryUploadedFile: image_1.png (image/png)>, <TemporaryUploadedFile: image_2.png (image/png)>]

但是,如果我尝试解析这样的图像:

request.data['image']

我只能看到最后一张图片,而django rest框架将其识别为文件对象,而不是列表。 如果我尝试迭代它,我只能看到字节。

我正在使用ModelViewset并添加了这个解析器

    parser_classes = (MultiPartParser, FormParser)

1 个答案:

答案 0 :(得分:2)

QueryDict具有一项特殊功能,可以获取与特定密钥相关联的所有值:getlist(key) [doc]。所以你可以这样写:

request.data.getlist('image')  # list of images

然后,您可以单独处理每个图像(例如在for循环中)。

或者像documentation中指定的那样:

QueryDict.getlist(key, default=None)
返回具有所请求密钥的数据列表。如果密钥不存在且未提供默认值,则返回空列表。除非提供的default值是“列表。
,否则保证返回列表

如果您执行索引编制(如request.data[key]),那么Python会在窗帘后面调用__getitem__,这将导致:

QueryDict.__getitem__(key)
返回给定键的值。如果键具有多个值,则返回最后一个值。如果密钥不存在,则引发django.utils.datastructures.MultiValueDictKeyError。 (这是Python标准KeyError的子类,因此您可以坚持捕捉KeyError。)