Django模型:使用外键中的字段

ggl*_*ses 2 python django django-uploads

为了这个目的,我正在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)
Run Code Online (Sandbox Code Playgroud)

好吧,最后一行代码是我想知道它是否可能或对其进行任何其他精细替换的内容。

在“ DJango-admin我希望能够为该表添加记录”中ImageGallery,选择“ Gallery我想使用”时,图像将保存到gallery.folder字段中指定的文件夹中。

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

e4c*_*4c5 5

所述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)
Run Code Online (Sandbox Code Playgroud)

然后您的模型将更改为

image = models.ImageField(upload_to=get_upload_path)
Run Code Online (Sandbox Code Playgroud)