Ok, ho provato quasi tutto e non riesco a farlo funzionare.
- Ho un modello Django con un ImageField su di esso
- Ho un codice che scarica un'immagine via HTTP (testato e funziona)
- L'immagine viene salvata direttamente nella cartella 'upload_to' (l'upload_per essere quello impostato su ImageField)
- Tutto quello che devo fare è associare il percorso del file di immagine già esistente a ImageField
Ho scritto questo codice in 6 modi diversi.
Il problema in cui mi imbatto è tutto il codice che sto scrivendo si traduce nel seguente comportamento: (1) Django creerà un secondo file, (2) rinominerà il nuovo file, aggiungendo un _ alla fine del file name, quindi (3) non trasferire alcun dato oltre a lasciarlo sostanzialmente un file rinominato vuoto. Ciò che rimane nel percorso 'upload_to' sono 2 file, uno che è l'immagine reale e uno che è il nome dell'immagine, ma è vuoto, e ovviamente il percorso ImageField è impostato sul file vuoto che Django tenta di creare .
Nel caso non fosse chiaro, proverò a illustrare:
## 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
Come posso farlo senza che Django tenti di ri-archiviare il file? Quello che mi piacerebbe davvero è qualcosa in tal senso ...
model.ImageField.path = generated_image_path
... ma ovviamente non funziona.
E sì, ho esaminato le altre domande qui come questa e il documento django su File
AGGIORNARE Dopo ulteriori test, esegue questo comportamento solo quando viene eseguito in Apache su Windows Server. Durante l'esecuzione sotto il "runtime server" su XP non esegue questo comportamento.
Sono perplesso.
Ecco il codice che funziona correttamente su XP ...
f = open(thumb_path, 'r')
model.thumbnail = File(f)
model.save()