Commit fba0149e authored by Tim Graham's avatar Tim Graham
Browse files

[1.4.X] Fixed #17016 - Added examples for file uploads in views.

Thanks Tim Saylor for the draft patch and Aymeric Augustin and Claude Paroz for feedback.

Backport of eff6ba2f from master
parent 6536f759
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -453,6 +453,7 @@ answer newbie questions, and generally made Django that much better:
    Vinay Sajip <vinay_sajip@yahoo.co.uk>
    Bartolome Sanchez Salado <i42sasab@uco.es>
    Kadesarin Sanjek
    Tim Saylor <tim.saylor@gmail.com>
    Massimo Scamarcia <massimo.scamarcia@gmail.com>
    Paulo Scardine <paulo@scardine.com.br>
    David Schein
+44 −0
Original line number Diff line number Diff line
@@ -179,6 +179,50 @@ Three settings control Django's file upload behavior:
    Which means "try to upload to memory first, then fall back to temporary
    files."

Handling uploaded files with a model
------------------------------------

If you're saving a file on a :class:`~django.db.models.Model` with a
:class:`~django.db.models.FileField`, using a :class:`~django.forms.ModelForm`
makes this process much easier. The file object will be saved when calling
``form.save()``::

    from django.http import HttpResponseRedirect
    from django.shortcuts import render
    from .forms import ModelFormWithFileField

    def upload_file(request):
        if request.method == 'POST':
            form = ModelFormWithFileField(request.POST, request.FILES)
            if form.is_valid():
                # file is saved
                form.save()
                return HttpResponseRedirect('/success/url/')
        else:
            form = ModelFormWithFileField()
        return render('upload.html', {'form': form})

If you are constructing an object manually, you can simply assign the file
object from :attr:`request.FILES <django.http.HttpRequest.FILES>` to the file
field in the model::

    from django.http import HttpResponseRedirect
    from django.shortcuts import render
    from .forms import UploadFileForm
    from .models import ModelWithFileField

    def upload_file(request):
        if request.method == 'POST':
            form = UploadFileForm(request.POST, request.FILES)
            if form.is_valid():
                instance = ModelWithFileField(file_field=request.FILES['file'])
                instance.save()
                return HttpResponseRedirect('/success/url/')
        else:
            form = UploadFileForm()
        return render('upload.html', {'form': form})


``UploadedFile`` objects
========================