Попытка загрузить и сохранить изображение в ImageField не удалась - PullRequest
1 голос
/ 30 декабря 2011

Код обидчика:

file_name = os.path.basename(image_url)
downloaded = urllib2.urlopen(image_url).read()
image_file = File(downloaded, name=file_name)
image_file.size = len( downloaded )

model = BlogPost()
model.image.save(file_name, image_file)
model.save()

Модель:

Класс BlogPost (models.Model): image = models.ImageField (upload_to = 'blog-image', help_text = 'Featureimage ', blank = True, null = True)

Я получаю следующее:

AttributeError: 'str' object has no attribute 'read'

Если удалить строку image_file.size:

AttributeError: 'str' object has no attribute 'name'

downloaded заполнен, поэтому он успешно загрузил файл.

Что я делаю не так?

1 Ответ

1 голос
/ 01 января 2012

Проблема заключалась в том, что файлу нужно больше, чем просто содержимое. Вместо того, чтобы пытаться использовать File и делать это:

image_file = File(downloaded, name=file_name)
image_file.size = len( downloaded )

Я должен использовать ContentFile и сделать это:

image_file = ContentFile(downloaded)

Из документации :

Класс ContentFile наследуется от File, но в отличие от File он работает со строковым содержимым, а не с самим файлом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...