我收到一个包含几个文件的数组。我的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)
答案 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
。)