[4.0.x] Fixed #32243 -- Added docs examples for manually saving Files.

Backport of c9d6e3595c from main
This commit is contained in:
Joshua Massover 2022-01-26 15:05:33 +01:00 committed by Mariusz Felisiak
parent 62fe7e08d6
commit 76c80d96f3
2 changed files with 24 additions and 0 deletions

View File

@ -33,6 +33,7 @@ store a photo::
name = models.CharField(max_length=255)
price = models.DecimalField(max_digits=5, decimal_places=2)
photo = models.ImageField(upload_to='cars')
specs = models.FileFile(upload_to='specs')
Any ``Car`` instance will have a ``photo`` attribute that you can use to get at
the details of the attached photo::
@ -73,6 +74,16 @@ location (:setting:`MEDIA_ROOT` if you are using the default
>>> car.photo.path == new_path
True
To save an existing file on disk to a :class:`~django.db.models.FileField`::
>>> from pathlib import Path
>>> from django.core.files import File
>>> path = Path('/some/external/specs.pdf')
>>> car = Car.objects.get(name='57 Chevy')
>>> with path.open(mode='rb') as f:
... car.specs = File(f, name=path.name)
... car.save()
.. note::
While :class:`~django.db.models.ImageField` non-image data attributes, such

View File

@ -126,6 +126,19 @@ model::
form = UploadFileForm()
return render(request, 'upload.html', {'form': form})
If you are constructing an object manually outside of a request, you can assign
a :class:`~django.core.files.File` like object to the
:class:`~django.db.models.FileField`::
from django.core.management.base import BaseCommand
from django.core.files.base import ContentFile
class MyCommand(BaseCommand):
def handle(self, *args, **options):
content_file = ContentFile(b'Hello world!', name='hello-world.txt')
instance = ModelWithFileField(file_field=content_file)
instance.save()
Uploading multiple files
------------------------