Я работаю над приложением CRUD для изменения базы данных MySQL с помощью Django, и я пытаюсь добавить 2 варианта загрузки CSV, которая добавляет данные в таблицу, и другую, которая заменяет данные с загруженным CSV (удалить и добавить) для этого я попытался сделать 2 кнопки для одной формы, но это не работает для меня.
views.py:
basecaseform = BaseCaseForm(request.POST)
BaseCase_columns = [key for key, value in BaseCase.__dict__.items()]
BaseCase_columns = BaseCase_columns[5:-1]
basecase = BaseCase.objects.all()
if request.method == 'GET':
return render(request,'basecaselist.html',{'basecaseform':basecaseform,'basecase':basecase,'BaseCase_columns':BaseCase_columns})
if 'replace' in request.GET:
BaseCase.objects.all().delete()
else:
pass
csv_file=request.FILES['file']
if not csv_file.name.endswith('.csv'):
messages.error(request,'this is not 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=',',quoting=csv.QUOTE_NONE):
_, created=BaseCase.objects.update_or_create(
base_case_name= column[0],
version= column[1],
default= column[2],
)
if basecaseform.is_valid():
basecaseform.save()
else:
basecaseform = BaseCaseForm()
return render(request,'basecaselist.html',{'basecaseform':basecaseform,'basecase':basecase,'BaseCase_columns':BaseCase_columns})
html файл:
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
<label for="file-upload" class="btn btn-primary">
Add
</label>
<input id="file-upload" type="file" name="add" onchange="this.form.submit()"/>
<label for="file-upload" class="btn btn-primary">
Replace
</label>
<input id="file-upload" type="file" name="replace" onchange="this.form.submit()"/>
</form>
это решение выдает ошибку:
Exception Type: MultiValueDictKeyError at /basecase/
Exception Value: 'file'