4👍
It seems as request.FILES is not necessary in this case (good thing cause it’s empty …)
I modified this line
wayfinder_map.media_file = request.FILES['media_file']
for
wayfinder_map.media_file = wayfinder_map_form.cleaned_data['media_file']
and it works. Not sure what the right way to do thing though… –
242👍
old question, but somebody might still find this useful.
In order to have your <input type=file>
files uploaded and showns in request.FILES, your form MUST contain enctype="multipart/form-data"
, eg:
<form action="" method="post" enctype="multipart/form-data">{% csrf_token %}
{{ form.as_p }}
<button type="submit">{% trans 'Submit' %}</button>
</form>
otherwise your files will not be uploaded and your request.FILES will be empty.
BTW That’s a common solution to a common error. Nevertheless, I still found myself in a situation with an empty FILES (and the file in the POST) when everything else was looking OK. I have the feeling it was a size limit but did not want to spend more time debugging, and just used request.raw_post_data
. If ever somebody falls on this issue please add a comment (including precise django version!) and I’ll try to debug more deeply.
- [Django]-Django REST Framework combining routers from different apps
- [Django]-Django override save for model only in some cases?
- [Django]-How to use if/else condition on Django Templates?
- [Django]-Change a form value before validation in Django form
- [Django]-How can I temporarily disable a foreign key constraint in MySQL?
- [Django]-Django – iterate number in for loop of a template
3👍
I know this is an old question, but it is the first result on google for “django request.file empty” so I would like to add a potential solution after searching for two days:
If you submit your files through ajax, make sure to send your form via formData()
instead of form.serialize()
see also here: Django JQuery Ajax File Upload
- [Django]-How to delete project in django
- [Django]-Import error django corsheaders
- [Django]-Gunicorn, no module named 'myproject
1👍
I found that If you put put the form in a content block then it seems to work
{% block content %}
<form enctype="multipart/form-data" class="uniForm" id="wayfinder_map_form" method="POST" action="">
<fieldset class="inlineLabels">
{{ wayfinder_map_form|as_uni_form }}
<div class="form_block">
<input type="hidden" name="action" value="create" />
<input type="submit" value="{% trans 'create' %}"/>
</div>
</fieldset>
</form>
{% endblock %}
- [Django]-Django – Where are the params stored on a PUT/DELETE request?
- [Django]-PyCharm: DJANGO_SETTINGS_MODULE is undefined
- [Django]-Disable session creation in Django
0👍
I think your troubles may lie in assigning data to a form without first verifying the the request is POST
@login_required
def create_map(request, form_class=WayfinderMapForm, template_name="wayfinder/map create.html"):
if request.method=='POST':
wayfinder_map_form = form_class(request.user, data=request.POST, files=request.FILES)
if wayfinder_map_form.is_valid():
#save your data
return HttpResponseRedirect(wayfinder_map.get_absolute_url())
else:
wayfinder_map_form=form_class(request.user)
return render_to_response(template_name, {"wayfinder_map_form": wayfinder_map_form,}, context_instance=RequestContext(request))
- [Django]-Django filter JSONField list of dicts
- [Django]-How do you log server errors on django sites
- [Django]-How to automatically login a user after registration in django