2016-05-16 49 views
1

我正在为DJango开发一个图像库项目,只是为了它。还有,我有一个名为Gallery的班级和一个名为ImageGallery的班级。Django-models:从外键使用字段

类命名的画廊是这样的:

class Gallery(models.Model): 
gallery = models.ForeignKey(Gallery, related_name="parent_gallery") 
title = models.CharField(max_length=200) 
folder = models.CharField(max_length=200) # ex: images/galleries/slugify(self.title) 

class ImageGallery(models.Model): 
gallery = models.ForeignKey(Gallery, related_name="parent_gallery") 
title = models.CharField(max_length=200) 
image = models.ImageField(upload_to=self.gallery.folder) 

嗯,最后一行代码是我想知道,如果可能或任何其它精细替换它的东西。

DJango-admin我希望能够添加记录表ImageGallery并选择Gallery当我想用的图像将被保存在gallery.folder字段中指定的文件夹。

什么是最好的方法来解决这个问题?我还没有完成两门课的写作,但我怀疑他们会这样工作。先谢谢你。 :-)

回答

3

FileField.upload_to定义如下

此属性提供设置上传目录的方式和文件 名,可以用两种方式来设定。在这两种情况下,该值都会通过 传递给Storage.save()方法。 ... upload_to也可以是一个可调用的,例如一个函数,如 。这将被调用以获取包括文件名的上传路径 。该可调用函数必须接受两个参数,并且 返回一个Unix样式的路径(带有正斜杠)以传递到存储系统的 。两个参数是:

但是self.gallery.folder不是可调用的。你需要的是设置沿着这个例子

def get_upload_path(instance, filename): 
    return '{0}/{1}'.format(instance.gallery.folder, filename) 

指定的行的函数,你的模型将变为

image = models.ImageField(upload_to=get_upload_path) 
+0

哇,我不知道我怎么错过了。除此之外,要走的路是非常棒的。对Django耶! – gglasses