Ok, tentei quase tudo e não consigo fazer isso funcionar.
- Eu tenho um modelo Django com um ImageField nele
- Eu tenho um código que baixa uma imagem via HTTP (testado e funciona)
- A imagem é salva diretamente na pasta 'upload_to' (o upload_to é aquele que está definido no ImageField)
- Tudo o que preciso fazer é associar o caminho do arquivo de imagem já existente ao ImageField
Eu escrevi este código sobre 6 maneiras diferentes.
O problema que eu estou enfrentando é que todo o código que estou escrevendo resulta no seguinte comportamento: (1) o Django cria um segundo arquivo, (2) renomeia o novo arquivo, adicionando um _ ao final do arquivo (3) não transfira nenhum dado, deixando basicamente um arquivo renomeado vazio. O que resta no caminho 'upload_to' são 2 arquivos, um que é a imagem real e outro que é o nome da imagem, mas está vazio, e é claro que o caminho ImageField é definido como o arquivo vazio que o Django tenta criar .
Caso isso não esteja claro, tentarei 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
Como posso fazer isso sem o Django tentar re-armazenar o arquivo? O que eu realmente gostaria é algo nesse sentido ...
model.ImageField.path = generated_image_path
... mas é claro que isso não funciona.
E sim, eu já passei por outras perguntas aqui, como esta , bem como o documento do django no arquivo
ATUALIZAÇÃO Após mais testes, ele só faz esse comportamento quando executado no Apache no Windows Server. Durante a execução no 'runserver' no XP, ele não executa esse comportamento.
Estou perplexo.
Aqui está o código que é executado com sucesso no XP ...
f = open(thumb_path, 'r')
model.thumbnail = File(f)
model.save()