Хорошо, я попробовал почти все и не могу заставить это работать.
- У меня есть модель Django с ImageField на ней
- У меня есть код, который загружает изображение через HTTP (проверено и работает)
- Изображение сохраняется непосредственно в папку upload_to (закачка - та, которая установлена в ImageField)
- Все, что мне нужно сделать, это связать уже существующий путь к файлу изображения с ImageField
Я написал этот код о 6 разных способах.
Проблема, с которой я сталкиваюсь, заключается в том, что весь код, который я пишу, приводит к следующему поведению:
(1) Django создаст второй файл, (2) переименует новый файл, добавив _ в конец имени файла, затем (3) не перенесет никаких данных, оставив его в основном пустым переименованным файлом. В пути «upload_to» осталось 2 файла, один из которых является фактическим изображением, а другой - именем изображения, но пустым, и, конечно, путь ImageField установлен на пустой файл, который пытается создать Django. .
Если это неясно, я попытаюсь проиллюстрировать:
## Image generation code runs....
/Upload
generated_image.jpg 4kb
## Attempt to set the ImageField path...
/Upload
generated_image.jpg 4kb
generated_image_.jpg 0kb
ImageField.Path = /Upload/generated_image_.jpg
Как я могу сделать это, не пытаясь Django повторно сохранить файл? Что мне действительно нравится, так это что-то в этом роде ...
model.ImageField.path = generated_image_path
... но, конечно, это не работает.
И да, я рассмотрел другие вопросы, такие как этот , а также документ django по File
UPDATE
После дальнейшего тестирования, это происходит только при работе под Apache на Windows Server. Во время работы под «runserver» на XP он не выполняет это поведение.
Я в тупике.
Вот код, который успешно работает на XP ...
f = open(thumb_path, 'r')
model.thumbnail = File(f)
model.save()