这是我使用的模型:
from django import models
class Image(models.Model):
file = models.ImageField(upload_to='uploads/images/')
现在,如果我做image.file.read()
我得到AttributeError: 'bytes' object has no attribute 'read'
>>> from images.models import Image
>>> img = Image.objects.first()
>>> img.file.read()
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "...\.venv\lib\site-packages\django\core\files\utils.py", line 42, in <lambda>
read = property(lambda self: self.file.read)
File "...\.venv\lib\site-packages\django\core\files\utils.py", line 42, in <lambda>
read = property(lambda self: self.file.read)
AttributeError: 'bytes' object has no attribute 'read'
image.file.file.file
返回bytes
对象,而不是File
对象。我正在使用Django 4.2.1和Python 3.10.7。
下面的代码解决了这个问题,但不是一个可行的解决方法。
import io
from images.models import Image
img = Image.objects.first()
img.file.file.file = io.BytesIO(img.file.file.file)
img.file.read() # Runs without errors
我认为image.file.file.file
应该是一个File
对象,但它返回的却是一个bytes
对象。我是不是漏掉了什么?
1条答案
按热度按时间uqcuzwp81#
在检查了我的存储库的代码后,我发现错误出在库本身。
将
File
替换为io.BytesIO
(类似文件的对象)后,错误停止。