Ok, j'ai essayé à peu près tout et je n'arrive pas à faire fonctionner cela.
- J'ai un modèle Django avec un ImageField dessus
- J'ai du code qui télécharge une image via HTTP (testé et fonctionne)
- L'image est enregistrée directement dans le dossier 'upload_to' (le upload_to étant celui qui est défini sur ImageField)
- Tout ce que je dois faire est d'associer le chemin du fichier image déjà existant à ImageField
J'ai écrit ce code sur 6 façons différentes.
Le problème que je rencontre est tout le code que j'écris entraîne le comportement suivant: (1) Django créera un 2ème fichier, (2) renommera le nouveau fichier, en ajoutant un _ à la fin du fichier nom, puis (3) ne transférez aucune des données plutôt que de le laisser essentiellement un fichier renommé vide. 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:
## 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 essaie de re-stocker le fichier? Ce que j'aimerais vraiment, c'est quelque chose à cet effet ...
model.ImageField.path = generated_image_path
... mais bien sûr, cela ne fonctionne pas.
Et oui, je suis passé par les autres questions ici comme celle-ci ainsi que le doc django sur File
MISE À JOUR Après des tests supplémentaires, il ne fait ce comportement que lors de l'exécution sous Apache sur Windows Server. Lors de l'exécution sous le «runserver» sous XP, il n'exécute pas ce comportement.
Je suis perplexe.
Voici le code qui fonctionne avec succès sous XP ...
f = open(thumb_path, 'r')
model.thumbnail = File(f)
model.save()