Fixed #13809 -- Made FieldFile.open() respect its mode argument.

This commit is contained in:
Chris Sinchok 2016-07-19 15:17:39 -05:00 committed by Tim Graham
parent ade681b9ad
commit ac1975b18b
2 changed files with 14 additions and 1 deletions

View File

@ -79,7 +79,10 @@ class FieldFile(File):
def open(self, mode='rb'):
self._require_file()
self.file.open(mode)
if hasattr(self, '_file') and self._file is not None:
self.file.open(mode)
else:
self.file = self.storage.open(self.name, mode)
# open() doesn't alter the file's contents, but it does reset the pointer
open.alters_data = True

View File

@ -742,6 +742,16 @@ class FileFieldStorageTests(TestCase):
self.assertEqual(list(obj.normal.chunks(chunk_size=2)), [b"co", b"nt", b"en", b"t"])
obj.normal.close()
def test_filefield_write(self):
# Files can be written to.
obj = Storage.objects.create(normal=SimpleUploadedFile('rewritten.txt', b'content'))
with obj.normal as normal:
normal.open('wb')
normal.write(b'updated')
obj.refresh_from_db()
self.assertEqual(obj.normal.read(), b'updated')
obj.normal.close()
def test_filefield_reopen(self):
obj = Storage.objects.create(normal=SimpleUploadedFile('reopen.txt', b'content'))
with obj.normal as normal: