Browse Source

Fixed #32243 -- Added docs examples for manually saving Files.

Joshua Massover 3 years ago
parent
commit
c9d6e3595c
2 changed files with 24 additions and 0 deletions
  1. 11 0
      docs/topics/files.txt
  2. 13 0
      docs/topics/http/file-uploads.txt

+ 11 - 0
docs/topics/files.txt

@@ -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

+ 13 - 0
docs/topics/http/file-uploads.txt

@@ -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
 ------------------------