我有一个Image
模型。我希望它根据用户选择的类别上传到文件夹。例如,如果用户选择“苹果”类别,我希望它上传到名为“苹果”的媒体文件夹中。
class Image(models.Model):
image = models.ImageField(upload_to=category)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
答案 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
字段,并且您想使用它。