Ok, ich habe fast alles ausprobiert und kann das nicht zum Laufen bringen.
- Ich habe ein Django-Modell mit einem ImageField
- Ich habe Code, der ein Bild über HTTP herunterlädt (getestet und funktioniert)
- Das Bild wird direkt im Ordner 'upload_to' gespeichert (der upload_to ist derjenige, der auf dem ImageField festgelegt ist).
- Ich muss lediglich den bereits vorhandenen Bilddateipfad mit ImageField verknüpfen
Ich habe diesen Code auf 6 verschiedene Arten geschrieben.
Das Problem, auf das ich stoße, ist, dass der gesamte Code, den ich schreibe, zu folgendem Verhalten führt: (1) Django erstellt eine zweite Datei, (2) benennt die neue Datei um und fügt am Ende der Datei ein _ hinzu Name, dann (3) keine der Daten übertragen, so dass es im Grunde eine leere umbenannte Datei bleibt. Was im Pfad 'upload_to' übrig bleibt, sind 2 Dateien, eine, die das eigentliche Bild ist, und eine, die den Namen des Bildes enthält, aber leer ist, und natürlich wird der ImageField-Pfad auf die leere Datei gesetzt, die Django zu erstellen versucht .
Falls das unklar war, werde ich versuchen zu veranschaulichen:
## 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
Wie kann ich dies tun, ohne dass Django versucht, die Datei erneut zu speichern? Was ich wirklich gerne hätte, ist etwas in diesem Sinne ...
model.ImageField.path = generated_image_path
... aber das funktioniert natürlich nicht.
Und ja, ich habe die anderen Fragen hier wie diese sowie das Django-Dokument in der Datei durchgesehen
UPDATE Nach weiteren Tests wird dieses Verhalten nur ausgeführt, wenn es unter Windows Server unter Apache ausgeführt wird. Während der Ausführung unter 'runserver' unter XP wird dieses Verhalten nicht ausgeführt.
Ich bin ratlos.
Hier ist der Code, der unter XP erfolgreich ausgeführt wird ...
f = open(thumb_path, 'r')
model.thumbnail = File(f)
model.save()