Search code examples
djangopython-3.xdjango-file-upload

Django File Upload Not Saving To Filesystem


When I upload the file I get a "POST /submit/ HTTP/1.1" 200 604. When I check to see if the file uploaded I can't find it.

Setting File includes:

 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 MEDIA_URL = '/media/'
 MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

Models:

 from django.db import models 

 class Document(models.Model):
    description = models.CharField(max_length=255, blank=True)
    document = models.FileField(upload_to='documents/')
    uploaded_at = models.DateTimeField(auto_now_add=True)

Forms:

from django import forms
from mysite.uploads.models import Document

class DocumentForm(forms.ModelForm):
    class Meta:
        model = Document
        fields = ['description', 'document']

Views:

 from django.shortcuts import render
 from django.http import HttpResponseRedirect
 from django.core.urlresolvers import reverse

 from mysite.uploads.models import Document
 from mysite.uploads.forms import DocumentForm

def model_upload(request):
    if request.method == 'POST':
        form = DocumentForm(request.POST, request.FILES)
        if form.is_valid():
            form.save(commit=True)
            return HttpResponseRedirect(reverse('uploadindex'))
   else:
       form = DocumentForm()
   return render(request, 'uploads/index.html', {
    'form': form
})

Urls:

from django.conf.urls import url

from mysite.uploads  import views

urlpatterns = [
    url(r'^$', views.model_upload, name='uploadindex'),
]

Templates: I am using the multipart/form-data, not sure about why the file wont upload.

 <html>
    <body>
    <form action="{% url "uploadindex" %}" 
       method="post"encytpe="multipart/form-data">
       {% csrf_token %}
       {{ form.as_p }}
       <button type="submit">Upload</button>
    </form>
    </body>
 </html>

Solution

  • ...
    if form.is_valid():
            form.save(commit=True)
            return HttpResponseRedirect(reverse('uploadindex'))
    else:
        print form.errors
    ...
    

    It will show you errors in case your document field have any error.