使用文件上传测试视图时出错

时间:2019-01-25 10:18:09

标签: django django-testing django-tests django-file-upload

我想使用以下功能从我的视图测试文件上传:

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

看到它可以在实际网站上运行,我怀疑它与我在测试中设置文件的方式有关;可能很小。

2 个答案:

答案 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 makemigrationspython manage.py migrate