Django models.FileField - store only the file name not any paths or folder references

gngrwzrd picture gngrwzrd · Apr 4, 2013 · Viewed 9.3k times · Source

I'm using Django's Admin site to manage some data - but not building a webapp. I need the file upload field to store only the file name in the database.

Right now I can get absolute paths like: /Users/me/uploads/file.png

Or using the upload_to parameter get something like this in the database: uploads/file.png

How can I get it to be this: file.png

EDIT:

I'm taking the sqlite database and using in another client - so having any paths in the db entry doesn't make sense in my case.

Thanks!

Answer

luc picture luc · Apr 4, 2013

I would keep the FileField and use python os.path.basename to extract the filename.

This can be encapsulated with a property

class MyModel(models.Model):
   file = models.FileField(...)

   @property
   def filename(self):
       return os.path.basename(self.file.name)