Ok, j'ai presque tout essayé et je n'arrive pas à le faire fonctionner.
- J'ai un modèle Django avec un ImageField.
- J'ai un code qui télécharge une image via HTTP (testé et fonctionne)
- L'image est enregistrée directement dans le dossier "upload_to" (le dossier "upload_to" étant celui qui est défini dans le champ "ImageField").
- Tout ce que je dois faire, c'est associer le chemin d'accès au fichier image déjà existant avec le champ ImageField.
J'ai écrit ce code de 6 façons différentes.
Le problème que je rencontre est que tout le code que j'écris a le comportement suivant : (1) Django crée un deuxième fichier, (2) renomme le nouveau fichier en ajoutant un _ à la fin du nom du fichier, puis (3) ne transfère aucune des données, laissant un fichier vide renommé. Ce qui reste dans le chemin 'upload_to' est 2 fichiers, un qui est l'image réelle, et un qui est le nom de l'image, mais est vide, et bien sûr le chemin ImageField est défini sur le fichier vide que Django essaie de créer.
Au cas où cela ne serait pas clair, je vais essayer d'illustrer mon propos :
## 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
Comment puis-je faire cela sans que Django n'essaie de re-stocker le fichier ? Ce que j'aimerais vraiment, c'est quelque chose comme ça...
model.ImageField.path = generated_image_path
...mais bien sûr, ça ne marche pas.
Et oui, j'ai parcouru les autres questions ici comme celui-ci ainsi que la documentation de django sur Fichier
UPDATE Après d'autres tests, ce comportement ne se produit que lors de l'exécution sous Apache sur Windows Server. Il n'exécute pas ce comportement lorsqu'il est exécuté sous 'runserver' sur XP.
Je suis perplexe.
Voici le code qui fonctionne avec succès sous XP...
f = open(thumb_path, 'r')
model.thumbnail = File(f)
model.save()