假设我有以下模型定义:
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。