有没有人在Python 3中使用Django SimpleUploadedFile
的工作示例?
此代码适用于Python 2,但不适用于Python 3。
我有以下测试:
test.py
class AttachmentModelTests(TestCase):
def setUp(self):
self.model = mommy.make(LocationLevel)
base_dir = dirname(dirname(dirname(__file__)))
self.image = join(base_dir, "source/attachments/test_in/test-mountains.jpg")
def test_create(self):
_file = SimpleUploadedFile(self.image, "file_content",
content_type="image/jpeg")
attachment = Attachment.objects.create(
model_id=self.model.id,
file=_file
)
self.assertIsInstance(attachment, Attachment)
self.assertEqual(
attachment.filename,
self.image.split('/')[-1] # test-mountains.jpg
)
以下是输出的错误:
Traceback (most recent call last):
File "/Users/alelevier/Documents/bsrs/bsrs-django/bigsky/generic/tests/test_models.py", line 97, in test_create
content_type="image/jpeg")
File "/Users/alelevier/.virtualenvs/bs/lib/python3.4/site-packages/django/core/files/uploadedfile.py", line 114, in __init__
super(SimpleUploadedFile, self).__init__(BytesIO(content), None, name,
TypeError: 'str' does not support the buffer interface
答案 0 :(得分:5)
这SO answer帮我解决了。
最后,这是更新的工作测试代码:
def test_create(self):
(abs_dir_path, filename) = os.path.split(self.image)
with open(self.image) as infile:
_file = SimpleUploadedFile(filename, infile.read())
attachment = Attachment.objects.create(
model_id=self.model.id,
file=_file
)
self.assertIsInstance(attachment, Attachment)
self.assertEqual(
attachment.filename,
self.image.split('/')[-1] # test-mountains.jpg
)