Fixed #26508 -- Clarified docs for various FieldFile methods.

This commit is contained in:
Tobias McNulty 2016-04-27 14:45:22 -04:00 committed by Tim Graham
parent 101dd787ec
commit dbd99de6fa
2 changed files with 48 additions and 5 deletions

View File

@ -31,6 +31,17 @@ The ``File`` class
The underlying :py:term:`file object` that this class wraps. The underlying :py:term:`file object` that this class wraps.
.. admonition:: Be careful with this attribute in subclasses.
Some subclasses of :class:`File`, including
:class:`~django.core.files.base.ContentFile` and
:class:`~django.db.models.fields.files.FieldFile`, may replace this
attribute with an object other than a Python :py:term:`file object`.
In these cases, this attribute may itself be a :class:`File`
subclass (and not necessarily the same subclass). Whenever
possible, use the attributes and methods of the subclass itself
rather than the those of the subclass's ``file`` attribute.
.. attribute:: mode .. attribute:: mode
The read/write mode for the file. The read/write mode for the file.

View File

@ -764,9 +764,36 @@ can change the maximum length using the :attr:`~CharField.max_length` argument.
When you access a :class:`~django.db.models.FileField` on a model, you are When you access a :class:`~django.db.models.FileField` on a model, you are
given an instance of :class:`FieldFile` as a proxy for accessing the underlying given an instance of :class:`FieldFile` as a proxy for accessing the underlying
file. In addition to the functionality inherited from file.
:class:`django.core.files.File`, this class has several attributes and methods
that can be used to interact with file data: The API of :class:`FieldFile` mirrors that of :class:`~django.core.files.File`,
with one key difference: *The object wrapped by the class is not necessarily a
wrapper around Python's built-in file object.* Instead, it is a wrapper around
the result of the :attr:`Storage.open()<django.core.files.storage.Storage.open>`
method, which may be a :class:`~django.core.files.File` object, or it may be a
custom storage's implementation of the :class:`~django.core.files.File` API.
In addition to the API inherited from
:class:`~django.core.files.File` such as :meth:`~django.core.files.File.read`
and :meth:`~django.core.files.File.write`, :class:`FieldFile` includes several
methods that can be used to interact with the underlying file:
.. warning::
Two methods of this class, :meth:`~FieldFile.save` and
:meth:`~FieldFile.delete`, default to saving the model object of the
associated ``FieldFile`` in the database.
.. attribute:: FieldFile.name
The name of the file including the relative path from the root of the
:class:`~django.core.files.storage.Storage` of the associated
:class:`~django.db.models.FileField`.
.. attribute:: FieldFile.size
The result of the underlying :attr:`Storage.size()
<django.core.files.storage.Storage.size>` method.
.. attribute:: FieldFile.url .. attribute:: FieldFile.url
@ -776,8 +803,13 @@ A read-only property to access the file's relative URL by calling the
.. method:: FieldFile.open(mode='rb') .. method:: FieldFile.open(mode='rb')
Behaves like the standard Python ``open()`` method and opens the file Opens or reopens the file associated with this instance in the specified
associated with this instance in the mode specified by ``mode``. ``mode``. Unlike the standard Python ``open()`` method, it doesn't return a
file descriptor.
Since the underlying file is opened implicitly when accessing it, it may be
unnecessary to call this method except to reset the pointer to the underlying
file or to change the ``mode``.
.. method:: FieldFile.close() .. method:: FieldFile.close()