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

StackOverflow https://stackoverflow.com/questions/15819402

  •  01-04-2022
  •  | 
  •  

Pergunta

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!

Foi útil?

Solução 2

The upload_to arg of the FileField can be a callable. see the docs

If you really need to only store the file name, I think you can do something like this. I did'nt try myself but I think it works.

def only_filename(instance, filename):
    return filename

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

Outras dicas

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)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top