html - request.FILES always empty on file upload -


i totally stumped on this, , must doing incredibly stupid. trying upload file on django project. problem seems no form data getting passed through server--only csrf token. running django 1.5.1, python 2.7, virtualenv, on mac, , using built-in django development server.

my html form is:

{% load url future %}  <form enctype="multipart/form-data" method="post" action="{% url 'showreport' %}">     {% csrf_token %}     <label>upload grade csv file: </label>     <input type="hidden" id="testing" value="maybe" />     <input type="file" id="grade_csv" />     <input type="submit" value="generate report" /> </form> 

my model:

from django.db import models  class document(models.model): file = models.filefield(upload_to='/media/', blank=true, null=true) 

my forms.py:

from django import forms .models import document  class documentform(forms.form): """ handle uploading grades csv file """ class meta:     models = document 

my views.py:

def report(request): """ process csv file remove inactive students manipulate right json format chart results """ if request.method == 'post':     form = documentform( request.post, request.files )     if form.is_valid():         newfile = document( file = request.files['file'] )         newfile.save()          classdata = {}         studentdata = {}          return render( request, 'report/showreport.html', { 'classdata': classdata, 'studentdata': studentdata } ) else:     form = uploadfileform()  return render( request, 'report/index.html', { 'form': form }) 

i have spent several hours searching solution, nothing seems work. i have enctype set correctly (i think), i using input type 'submit' form, , i binding form data model (doesn't matter, since request.files empty). tried using direct url in form action (action='/report/showreport/') per this django newbie page, didn't make difference. far can tell, there no other scripts binding form submit action , overriding default action.

i realize code above should likley request.files['grades_csv'] match form's input id...yet doesn't matter yet, since request.files empty.

in trying debug, have set pdb trace right before if request.method == "post" in view. using console, can see request.post not include hidden "testing" input, , request.files empty. when run in browser, returns me form page, saying form invalid. pdb results here:

(pdb) request.files (pdb) <multivaluedict: {}> (pdb) request.post['testing'] (pdb) *** multivaluedictkeyerror: "key 'testing' not found in <querydict: {u'csrfmiddlewaretoken': [u'0tgcchxa3po619dci114sb9jmwrt82aj']}>" (pdb) request.post <querydict: {u'csrfmiddlewaretoken': [u'0tgcchxa3po619dci114sb9jmwrt82aj']}> 

if try access request.files in views.py without checking if form valid, error:

"key 'file' not found in <multivaluedict: {}>" 

i stumped , appreciate on why cannot work--it seems should simple. can manually create , write files within project directory using pdb, don't think permissions problem...the problem in form?

i had problem , puzzling on while. error same -- missing necessary fields on input field.

in order see required fields are, nice thing is, in case:

from base.forms import documentform ## or put whatever name of app, unspecified in question print documentform() 

this print html need, including tags object requires. neat functionality missed first time, outlined in the docs.


Comments

Popular posts from this blog

php - Calling a template part from a post -

Firefox SVG shape not printing when it has stroke -

How to mention the localhost in android -