我为我的项目模型创建了一个函数,其中根据用户的名称和项目的标题上传图像。
现在我正在尝试向该项目添加更多图像,并且该图像有一个外键,但现在我不想创建随机上传新图像到另一个文件夹,而是想将这些图像上传到之前根据同一项目确定的同一文件夹。
我试图更改以前的函数,但它返回了一个错误upload_design_to() takes 1 positional argument but 2 were given
,我认为是因为我没有将self
添加到函数中,但我不知道用什么来替换它。
以下功能将更具描述性:
以下是根据用户名和项目标题将图像上传到某个位置的模型和功能:
class Item(models.Model):
def upload_design_to(self, filename):
return f'{self.designer}/{self.title}/{filename}'
designer = models.ForeignKey(
User, on_delete=models.CASCADE)
title = models.CharField(max_length=100)
image = models.ImageField(blank=False, upload_to=upload_design_to)
现在我创建了一个新的图像模型,将更多的图像添加到这个项目中,并希望将它们上传到相同的文件夹
class Images(models.Model):
def upload_design_to(filename):
return f'{Item.designer}/{Item.title}/{filename}'
item = models.ForeignKey(Item, on_delete=models.CASCADE)
name = models.CharField(max_length=50, blank=True)
image = models.ImageField(blank=True, upload_to=upload_design_to)
def __str__(self):
return self.name
不重复的解决方案是调用相关Item
的upload_design_to
class Images(models.Model):
def upload_design_to(self, filename):
return self.item.upload_design_to(filename)
item = models.ForeignKey(Item, on_delete=models.CASCADE)
name = models.CharField(max_length=50, blank=True)
image = models.ImageField(blank=False, upload_to=upload_design_to)
class Images(models.Model):
def upload_design_to(self, filename):
return f'{self.item.designer}/{self.item.title}/{filename}'
item = models.ForeignKey(Item, on_delete=models.CASCADE)
name = models.CharField(max_length=50, blank=True)
image = models.ImageField(blank=True, upload_to=upload_design_to)
def __str__(self):
return self.name
关于您提出的错误,您还可以为文件字段设置max_length
属性,这样它就不会超过文件限制。您可以将其设置为10000000或足够长的文件。参考