次のモデル定義があるとします。
class Image(models.Model):
image = models.ImageField(upload_to='images')
さらに、リモート URL のコンテンツを取得して、上記のモデルに行を挿入するとします。たとえば、次の画像をご覧ください。
https://www.python.org/images/python-logo.gif
次のコードから始めます。
from tempfile import NamedTemporaryFile
fn = 'https://www.python.org/images/python-logo.gif'
# Read the contents into the temporary file.
f = NamedTemporaryFile()
f.name = fn
f.write(urlopen(fn).read())
f.flush()
# Create the row and save it.
r = Image(image=File(f))
r.save()
これが機能しない理由はわかりません。少しデバッグした後、次のことがわかりました。
- リモート イメージはエラーなしでダウンロードされ、一時ファイルに保存されます
- ファイルは
MEDIA_ROOT
ディレクトリに作成されますが、サイズは 0 です - 行は保存されませんが、例外はスローされません!
ここで何が起こっているのか、誰かが光を当てることができますか? 私は何を間違っていますか?これを行う簡単な方法はありますか?
それが役立つ場合、LinuxでDjango 1.4を実行しています。