我试图测试多个图像上传到我的服务器。下面是序列化器:
class ImageSerializer(serializers.ModelSerializer):
image = serializers.ListField(
child=serializers.ImageField(allow_empty_file=True)
)
字符串
ImageFactory:
def get_image():
image = Image.new("RGB", (2000, 2000))
file = tempfile.NamedTemporaryFile(suffix=".jpg")
image.save(file)
return file
型
试验项目:
def test_upload_multiple_images(self):
self.image = get_image()
with open(self.image.name, "rb") as file:
payload = {
"image": [file, file]
}
response = self.client.post(
reverse("gallery-list", args=[self.item.pk]),
data=payload,
format="multipart"
)
型
通过Postman进行测试时,阵列中的图像会正确保存。然而,当使用测试用例时,我从响应中得到以下消息:
{'image': [{'message': 'The submitted file is empty.', 'code': 'empty'}]}
型
在添加 allow_empty_file=True 之前,返回了两条消息。有人知道为什么会这样吗?
1条答案
按热度按时间hmmo2u0o1#
这里的问题是,您将同一个Image对象发送到数据库并保存两次。一旦第一个Image对象被解码为要保存在数据库中的文件,Image对象将变得不可读,并且由于它与第二个对象相同,因此将抛出错误。
因此,如果您将相同的Image对象作为两个不同的项目发送,则只有第一个项目是可读的。为了避免这种情况,您必须发送两个不同的图像对象。
您的ImageFactory可以重构为:
字符串
你的测试:
型