I'm trying to create a view for uploading a .csv file and parsing it on the template but it's returning a
MultiValueDictKeyError at /'file'
The template has
<form method="POST" enctype="multipart/form-data">{% csrf_token %} <div class="file-field input-field"> <div class="btn"> <span>Upload a CSV FILE</span> <input type="file" name="file"> </div> <div class="file-path-wrapper"> <input class="file-path validate" type="text"> </div> <button class="waves-effect waves-light btn teal" type="submit">Upload</button> </div> </form>
Then my views has
import csv, io
from django.shortcuts import render
from django.contrib import messages
def data_upload(request):
template = "home.html"
if request.method == 'GET':
return render(request, template)
csv_file = request.FILES['file']
if not csv_file.name.endswith('.csv'):
messages.error(request, 'Please upload a .csv file.')
data_set = csv_file.read().decode('UTF-8')
io_string = io.StringIO(data_set)
next(io_string)
for column in csv.reader(io_string, delimiter=',', quoteschar="|"):
_, created = Table.objects.update_or_create(
page=column[0],
keyword=column[1],
interval=column[2],
email=column[3],
billing=column[4],
notes=column[5],
)
context = {}
return render(request, template, context)
I'm wondering why it's returning the error(?).
multipart/form-dataheader. - Sahil