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 .. attribute:: FileField.upload_to
A local filesystem path that will be appended to your :setting:`MEDIA_ROOT` This attribute provides a way of setting the upload directory and file name,
setting to determine the value of the and can be set in two ways. In both cases, the value is passed to the
:attr:`~django.db.models.fields.files.FieldFile.url` attribute. :meth:`Storage.save() <django.core.files.storage.Storage.save>` method.
This path may contain :func:`~time.strftime` formatting, which will be If you specify a string value, it may contain :func:`~time.strftime`
replaced by the date/time of the file upload (so that uploaded files don't formatting, which will be replaced by the date/time of the file upload (so
fill up the given directory). 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 class MyModel(models.Model):
obtain the upload path, including the filename. This callable must be able # file will be uploaded to MEDIA_ROOT/uploads
to accept two arguments, and return a Unix-style path (with forward slashes) upload = models.FileField(upload_to='uploads/')
to be passed along to the storage system. The two arguments that will be # or...
passed are: # 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 Argument Description
@ -630,6 +643,15 @@ Has two optional arguments:
when determining the final destination path. 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 .. attribute:: FileField.storage
A storage object, which handles the storage and retrieval of your A storage object, which handles the storage and retrieval of your