Opened 8 years ago
Last modified 8 years ago
#27716 closed Bug
FieldFile incorrectly returns bytes the first time it is opened with 'r' — at Version 1
Reported by: | Tom Forbes | Owned by: | nobody |
---|---|---|---|
Component: | File uploads/storage | Version: | 1.10 |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
This is strange. On the latest 1.10 release with Python 3.5.2 if I have this model, created in a fresh project with no non-default settings (other than 'MEDIA_ROOT' set to a directory and a single app in INSTALLED_APPS with this model):
class SomeModel(models.Model): fd = models.FileField()
Then I run this in manage.py shell
:
>>> s = SomeModel.objects.create(fd='test.txt') >>> s.fd.size 5 >>> s.fd.closed True >>> s.fd.open('r') >>> s.fd.read() b'hello' >>> s.fd.close() >>> s.fd.open('r') >>> s.fd.read() 'hello'
The first time a FileField
is opened it appears to disregard the encoding given and always returns bytes. However the second time it correctly returns a string. If you re-fetch the model then the behavior happens again.
Just to mention that I'm on Linux, but my co-worker is on Windows and both appear to have this behavior.