基于外键值的upload_to

时间:2019-11-15 21:31:04

标签: django django-models django-views

我有一个Image模型。我希望它根据用户选择的类别上传到文件夹。例如,如果用户选择“苹果”类别,我希望它上传到名为“苹果”的媒体文件夹中。

class Image(models.Model):
    image = models.ImageField(upload_to=category)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)

1 个答案:

答案 0 :(得分:2)

您可以将可调用对象传递到以原始文件的category和参数self作为参数的filename

因此,您可以将其定义为:

from os.path import join as osjoin

class Image(models.Model):

    def image_dir(self, filename):
        return osjoin(str(self.category), filename)

    image = models.ImageField(upload_to=image_dir)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)

请注意,这里我假设您已经为Category模型提供了一种__str__方法。但是,您可以将str(self.category)更改为例如:self.category.name,例如,如果Category有一个name字段,并且您想使用它。