我想使用以下功能从我的视图测试文件上传:
Panel
当我在实际网站上测试文件上传时,它可以工作。但是当我运行此测试时,出现以下错误:
django.core.exceptions.SuspiciousFileOperation:找不到存储 “ WHJpMYuGGCMdSKFruieo / Documents / eWEjGvEojETTghSVCijsaCINZVxTvzpXNRBvmpjOrYvKAKCjYu / test_file_KTEMuQa.txt”的可用文件名。 请确保相应的文件字段允许足够 “ max_length”。
这是我的表单def test_post(self):
with open("path/to/myfile/test_file.txt") as file:
post_data = {
'description': "Some important file",
'file': file,
}
response = self.client.post(self.test_url, post_data)
self.assertEqual(response.status_code, 302)
document = Document.objects.first()
self.assertEqual(document.description, "My File")
self.assertEqual(document.filename, 'test_file.txt')
方法:
save
看到它可以在实际网站上运行,我怀疑它与我在测试中设置文件的方式有关;可能很小。
答案 0 :(得分:0)
为了简洁起见,我从最初的问题中删除了不相关的模型字段。但是,当Ahtisham请求查看upload_to
属性(具有自定义功能)时,我删除了那些不相关的字段,它起作用了!
这是我原始代码(不起作用),其中包含不相关的字段:
def documents_path(instance, filename):
grant = instance.grant
client = grant.client
return '{0}/Grant Documents/{1}/{2}'.format(client.folder_name, grant.name, filename)
....
file = models.FileField(upload_to=documents_path)
但这可行:
def documents_path(instance, filename):
return 'Documents/{0}'.format(filename)
之所以可以在实际的网站上运行,是因为它没有使用测试装置中的长字符。好像我认为与该问题无关的那些字段实际上非常重要!
TL; DR ,我减少了自定义文档路径的长度。
答案 1 :(得分:0)
我在ImageField上遇到了相同的错误。解决方案是在max_length=255
中添加models.py
:
image = models.ImageField(upload_to = user_path,max_length = 255)
然后运行python manage.py makemigrations
和python manage.py migrate
。