try this
def get_file_path(instance, filename): path = 'your upload directory' extension = filename.split('.')[-1].lower() new_file_name = self.id return '%(path)s/%(filename)s.%(extension)s' % { 'path': path, 'filename': new_file_name', 'extension': extension } class Decision(m.Model): ... decision = m.FileField(upload_to=get_file_path) On Sep 5, 11:01 am, Stratos Moros <s.mo...@indev.gr> wrote: > I forgot to mention that i have imported models like this: > > import django.db.models as m > > This should explain the first two lines. > > > > > > > > On Mon, Sep 5, 2011 at 12:28 PM, Stratos Moros <s.mo...@indev.gr> wrote: > > Hello, > > > I have a model that includes a FileField. When the user uploads a file > > via the admin interface, I want the file to be saved as 'upload_to/ > > primary_key/original_filename'. Since the object will not be saved in > > the database when the user uploads the file, it will not have a > > primary key at that point. This is my workaround: > > > class Decision(m.Model): > > ... > > decision = m.FileField(upload_to='base_dir/') > > ... > > > def save(self, *args, **kwargs): > > """ custom save to use pk on filename """ > > #save once to get a pk > > super(Decision, self).save(*args, **kwargs) > > > #get info about the file > > uploaded = self.decision > > old_path = self.decision.name > > basedir, filename = os.path.split(old_path) > > new_path = os.path.join(basedir, str(self.pk), filename) > > > #create the new file, delete the one django created > > uploaded.storage.save(new_path, uploaded) > > uploaded.storage.delete(old_path) > > > #assign new path and save again > > self.decision = new_path > > super(Decision, self).save(*args, **kwargs) > > > This works, but seems to be a bit on the hacky side. Basically, I'm > > letting FileField upload the file to the 'upload_to' path and then > > move it to its correct path when the object has a primary key. > > > I was wondering if there is a better way to do this. Are there any > > cases where my code wouldn't work? > > > Thanks. -- You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com. To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-users?hl=en.