Django-models:使用外键字段

时间:2016-05-16 23:05:52

标签: 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)

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

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

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

1 个答案:

答案 0 :(得分:4)

FileField.upload_to定义如下

  

此属性提供了一种设置上载目录和文件的方法   名称,可以通过两种方式设置。在这两种情况下,都会传递该值   到Storage.save()方法。 ... upload_to也可以是可调用的,   比如一个功能。这将被调用以获取上传路径,   包括文件名。这个callable必须接受两个参数和   返回一个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)