Fixed #24510 -- Clarified FileField.upload_to docs.

This commit is contained in:
Matt Seymour 2015-03-26 08:33:01 +00:00 committed by Tim Graham
parent 4ee08958f1
commit 98c5370ef6
1 changed files with 33 additions and 11 deletions

View File

@ -598,19 +598,32 @@ Has two optional arguments:
.. attribute:: FileField.upload_to
A local filesystem path that will be appended to your :setting:`MEDIA_ROOT`
setting to determine the value of the
:attr:`~django.db.models.fields.files.FieldFile.url` attribute.
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
:meth:`Storage.save() <django.core.files.storage.Storage.save>` method.
This path may contain :func:`~time.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).
If you specify a string value, it may contain :func:`~time.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::
This may also be a callable, such as a function, which will be called to
obtain the upload path, including the filename. This callable must be able
to accept two arguments, and return a Unix-style path (with forward slashes)
to be passed along to the storage system. The two arguments that will be
passed are:
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
:class:`~django.core.files.storage.FileSystemStorage`, the string value
will be appended to your :setting:`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
@ -630,6 +643,15 @@ Has two optional arguments:
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)
.. attribute:: FileField.storage
A storage object, which handles the storage and retrieval of your