Reputation: 147
How can I make a django model upload its files to a folder named after a property of the models instance?
Here is my model. I am trying to make it upload all files to badgeTemplates/[model instance name here].
class BadgeTemplate(models.Model):
name = models.CharField(max_length=50,unique=True)
slug = models.SlugField(unique=True)
template = models.FileField(upload_to='badgeTemplates/',unique=True)
configFile = models.FileField(upload_to='badgeTemplates/',unique=True)
def __str__(self):
return self.name
I've tried upload_to='badgeTemplates/' + self.name
but it says that self isn't defined.
Upvotes: 1
Views: 461
Reputation: 476614
You can pass a callable to the upload_to=…
parameter [Django-doc]:
class BadgeTemplate(models.Model):
def upload_file_name(self, filename):
return f'badgeTemplates/{self.name}/{filename}'
name = models.CharField(max_length=50, unique=True)
slug = models.SlugField(unique=True)
template = models.FileField(upload_to=upload_file_name, unique=True)
configFile = models.FileField(upload_to=upload_file_name, unique=True)
def __str__(self):
return self.name
You should not use parenthesis (), since then you pass the result of the function call. You need to pass a reference to the function itself.upload_file_name()
Upvotes: 1