【发布时间】:2011-12-14 22:30:50
【问题描述】:
我已阅读有关此主题的其他问题,但没有一个能够真正回答我的问题。
我让用户在向网站提交特定项目时上传图片。每个用户可以提交多件商品,每件商品有一张图片。
问题是,我不想用原始文件名保存图片。我想用项目的 ID 保存它。因此,如果用户提交了一个 Banana 项目,该项目的 ID 为 5,文件名为
banana.jpg
我希望它保存为
site_media/items/5.jpg
而不是
site_media/items/banana.jpg
这是 Django 自动执行的操作。
现在的问题是,当我从表单中获取 POST 多部分数据时,我已经将图片保存为 site_media/items/item_ID.jpg。但是,当我尝试在模板上显示字段 item.picture 时,它会尝试访问
site_media/items/banana.jpg
而不是
site_media/items/5.jpg
哪个是实际存在的文件。所以我得到了一个损坏的链接。
我试图更改 picture.path 属性,希望它只是 Django 在链接图像时读取的字符串,但 Django 给了我一个异常,这让我认为它可能是别的东西。
当然,如果有一种解决方案,我希望在保存时只更改文件名,而不是删除具有原始文件名的文件并使用新名称保存副本,以实现良好的实践和效率目的。
有人可以帮我吗?谢谢。
型号代码:
class Item(...):
...
picture = models.ImageField(
upload_to="site_media/items/",
max_length=512,
null=True,
default=''
)
这是处理 POST 表单的函数:
item = Item.objects.create(... data from form)
try:
picture = FILES['picture']
print str(picture)
destination = open('site_media/items/'+str(item.id)+".png", 'wb+')
for chunk in picture.chunks():
destination.write(chunk)
destination.close()
item.picture = picture
except Exception:
messages.error(request, "Picture for item not loaded successfully")
【问题讨论】:
标签: django django-models