Ok, he intentado casi todo y no puedo hacer que esto funcione.
- Tengo un modelo Django con un ImageField
- Tengo un código que descarga una imagen a través de HTTP (probado y funciona)
- La imagen se guarda directamente en la carpeta 'upload_to' (el upload_to es el que está configurado en ImageField)
- Todo lo que necesito hacer es asociar la ruta del archivo de imagen ya existente con ImageField
He escrito este código sobre 6 formas diferentes.
El problema con el que me encuentro es que todo el código que estoy escribiendo da como resultado el siguiente comportamiento: (1) Django creará un segundo archivo, (2) cambiará el nombre del nuevo archivo y agregará un _ al final del archivo nombre, luego (3) no transfiera ninguno de los datos dejando básicamente un archivo vacío renombrado. Lo que queda en la ruta 'upload_to' son 2 archivos, uno que es la imagen real y otro que es el nombre de la imagen, pero está vacío, y por supuesto, la ruta ImageField está configurada en el archivo vacío que Django intenta crear .
En caso de que eso no esté claro, intentaré ilustrar:
## 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
¿Cómo puedo hacer esto sin que Django intente volver a almacenar el archivo? Lo que realmente me gustaría es algo en este sentido ...
model.ImageField.path = generated_image_path
... pero por supuesto eso no funciona.
Y sí, he revisado las otras preguntas aquí, como esta , así como el documento de django en File
ACTUALIZACIÓN Después de más pruebas, solo realiza este comportamiento cuando se ejecuta bajo Apache en Windows Server. Mientras se ejecuta bajo el 'servidor de ejecución' en XP, no ejecuta este comportamiento.
Estoy perplejo
Aquí está el código que se ejecuta con éxito en XP ...
f = open(thumb_path, 'r')
model.thumbnail = File(f)
model.save()