FileField.upload_to
This attribute provides a way of setting the upload directory and file name, and can be set in two ways. In both cases, the value is passed to the Storage.save()
method.
If you specify a string value, it may contain strftime()
formatting, which will be replaced by the date/time of the file upload (so that uploaded files don’t fill up the given directory). For example:
class MyModel(models.Model): # file will be uploaded to MEDIA_ROOT/uploads upload = models.FileField(upload_to='uploads/') # or... # file will be saved to MEDIA_ROOT/uploads/2015/01/30 upload = models.FileField(upload_to='uploads/%Y/%m/%d/')
If you are using the default FileSystemStorage
, the string value will be appended to your MEDIA_ROOT
path to form the location on the local filesystem where uploaded files will be stored. If you are using a different storage, check that storage’s documentation to see how it handles upload_to
.
upload_to
may also be a callable, such as a function. This will be called to obtain the upload path, including the filename. This callable must accept two arguments and return a Unix-style path (with forward slashes) to be passed along to the storage system. The two arguments are:
Argument | Description |
---|---|
instance |
An instance of the model where the In most cases, this object will not have been saved to the database yet, so if it uses the default |
filename | The filename that was originally given to the file. This may or may not be taken into account when determining the final destination path. |
For example:
def user_directory_path(instance, filename): # file will be uploaded to MEDIA_ROOT/user_<id>/<filename> return 'user_{0}/{1}'.format(instance.user.id, filename) class MyModel(models.Model): upload = models.FileField(upload_to=user_directory_path)
Please login to continue.