2

我正在 DJango 开发一个图片库项目,只是为了它。好吧,我有一个名为的类Gallery和一个名为ImageGallery.

名为 gallery 的类如下所示:

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字段中指定的文件夹中。

解决这个问题的最佳方法是什么?我还没有写完这两个类,但我怀疑它们会像这样工作。先感谢您。:-)

4

1 回答 1

8

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)
于 2016-05-16T23:57:00.670 回答