models.py
class Entry(models.Model):
owner = models.ForeignKey(User, related_name='owner')
myfile = models.FileField(upload_to='my_files/%Y/%m/%d')
I need to change the extension of previously uploaded files using this model.
models.py
class Entry(models.Model):
owner = models.ForeignKey(User, related_name='owner')
myfile = models.FileField(upload_to='my_files/%Y/%m/%d')
I need to change the extension of previously uploaded files using this model.
Note that upload_to
can be callable, like this:
import date
import os
def upload_path(instance, filename):
d = date.today()
parts = os.path.splitext(filename)
return 'my_files/%s/%s/%s/%s.%s' % (
d.year, d.month, d.day, parts[0], 'new_ext')
So, in your model:
class Entry(models.Model):
# ...
myfile = models.FileField(upload_to=upload_path)
This won't help you to handle files already uploaded in past, but new uploads will have correct names.
You need to redefine model's save method this way:
import os
def save(self, *args, **kwargs):
if self.pk:
prev_instance = Entry.objects.get(pk=self.pk)
if prev_instance.myfile:
name = os.path.splitext(prev_instance.myfile)[0]
os.rename(prev_instance.myfile, name + ".old")
super(Entry, self).save(*args, **kwargs)