Хорошо, я пробовал почти все, и я не могу заставить это работать.
- У меня есть модель Django с ImageField на ней
- У меня есть код, который загружает изображение через HTTP (проверено и работает)
- Изображение сохраняется непосредственно в папке 'upload_to' (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 doc на File
UPDATE После дальнейшего тестирования это происходит только при работе под Apache на Windows Server. При работе под "сервером" на XP он не выполняет это поведение.
Я в тупике.
Вот код, который успешно работает в XP...
f = open(thumb_path, 'r')
model.thumbnail = File(f)
model.save()