我有一个基本描述HTML页面的Page模型。然后,网页会提供网址,例如http://www.mysite.com/page/1234/,用于ID(pk)1234的页面。
我希望能够在我的页面中添加或附加图像。因此,我想使用带有外键的Image类到Page对象:
class Page(models.Model):
title = ...
content = ...
class Image(models.Model):
page = models.ForeignKey(Page)
image = models.ImageField(...)
这是我的问题:我想使用以下形式的网址向客户端提供图片: http://www.mysite.com/images/1234/image_name.jpg,即包含页面ID的URL。同样在服务器上,路径应该反映页面结构:/path/to/media/images/1234/image_name.jpg
我不知道如何解决这个问题。一方面,我想保留与路径格式相关的ImageField的功能。例如,当上传两个具有相同名称的图像时,Django会创建两个以“image.jpg”和“image_2.jpg”结尾的路径,以便在两个图像之间产生差异。
另一方面,upload_to选项的功能有限,我不知道如何在路径中插入页面ID。特别是一些棘手的情况,例如在创建页面的同时上传图像(使用相同的表单),这意味着应该在上传图像之前生成页面ID。
制作一个行为如上所述的图像模型是否相当容易?如果是这样,我如何修改图像模型以在图像路径中插入页面ID?
我已经看到问题Customize save path for ImageField,但它没有解决可能未分配的主键问题。
感谢。
答案 0 :(得分:0)
实际上,作为upload_to参数传递的简单函数有效,并且不存在不存在id的问题。所以我想Django的默认行为是在保存父页面模型之后保存图像,正如我想的那样。
在图像模型中:
image = models.ImageField(upload_to=get_image_path)
具有以下功能:
def get_image_path(instance, filename):
return 'pics/' + str(instance.page.id) + '/' + filename